Pytest学习总结

文章目录

  • 前言
  • 一、pytest单元测试框架
    • 1.单元测试框架和自动化测试框架的关系
    • 2.pytest简介
  • 二、pytest使用
    • 1.使用规则
    • 2.运行方式
      • 参数详解
    • 3.运行顺序
    • 4.分组执行(冒烟、分模块执行、分接口和web执行)
    • 5.pytest跳过测试用例
    • 6.使用@pytest.fixture()实现部分测试用例的前后置(固件、夹具)
    • 7.通过conftest.py和@pytest.fixture()结合实现全局的前置应用(如:项目的全局登录、模块的全局处理)
    • 8.断言
    • 9.生成allure测试报告
  • 三、pytest实战
    • 1.yaml接口自动化实战


前言

本篇文章主要记录pytest的学习历程,其中包括pytest的语法、用法、实战等。


一、pytest单元测试框架

单元测试是指在软件开发中针对软件的最小单位(函数、方法)进行正确性的检查测试。
单元测试框架:
java:junit和testng(可以看看我之前的文章)。
python:unittest和pytest。
单元测试框架主要做:
(1)测试发现:从多个文件里面去找到测试用例;
(2)测试执行:按照一定的顺序和规则去执行,并生成结果;
(3)测试判断:通过断言判断预期结果和实际结果的差异;
(4)测试报告:统计测试进度、耗时、通过率,生成测试报告。

1.单元测试框架和自动化测试框架的关系

(1)什么是自动化测试框架:封装自动化的基础模块、管理模块、统计模块。
(2)作用
1)提高测试效率,降低维护成本;
2)减少人工干预,提高测试的准确性,增加代码的重用性;
3)核心思想是让不懂代码的人也能够通过这个框架去实现自动化测试。
(3)pytest单元测试框架和自动化测试框架的关系
单元测试框架:只是自动化测试框架中的组成部分之一。
pom设计模式:只是自动化测试框架中的组成部分之一,
数据驱动、关键字驱动、全局配置文件的封装、日志监控、selenium、requests、断言、报告邮件…

2.pytest简介

(1)pytest是一个非常成熟的python的单元框架,比unit test更灵活,容易上手。
(2)pytest可以和selenium、requests、appium结合实现web自动化、接口自动化、app自动化。
(3)pytest可以实现测试用例的跳过以及reruns 失败用例重试。
(4)pytest可以和allure生成美观的测试报告。
(5)pytest可以和Jenkins持续集成。
(6)pytest有很多非常强大的插件,这些插件能够实现很多的使用操作。
 pytest-html:生成html格式的自动化测试报告。
 pytest-xdist:测试用例分布式执行,多CPU分发。
 pytest-ordering:用于改变测试用例的执行顺序。
 pytest-rerunfailures:用例失败后重跑。
 allure-pytest:用于生成美观的测试报告。

二、pytest使用

1.使用规则

(1)模块名必须以test_开头或 _test结尾。
(2)测试类必须以Test开头,并且不能有init方法。
(3)测试方法必须以test开头。

2.运行方式

(1)主函数模式。
运行所有:

pytest.main()

带参数运行:

pytest.main(['-s'])
pytest.main(['-v'])
pytest.main(['-vs'])

指定模块运行:

pytest.main(['-vs', 'test_login.py'])

指定目录:

pytest.main(['-vs', './interface_testcase'])

通过nodeid

pytest.main(['-vs', './interface_testcase/test_interface.py::test_04_func'])

(2)命令行模式。
运行所有:pytest
带参数执行:pytest -s
指定模块运行:pytest -vs test_login.py
指定目录:pytest.main -vs ./interface_testcase

(3)通过读取pytest.ini配置文件运行。
pytest.ini这个文件是pytest单元测试框架的核心配置文件。
位置:一般放在项目的根目录。
编码:必须是ANSI,可以使用notepad++修改编码格式。
作用:改变pytest默认的行为。
运行的规则:不管是主函数的模式运行,命令行模式运行,都会读取该文件。
格式:

[pytest]
# 命令行参数,用空格分割
addopts = -vs
# 测试用例文件夹,可自己配置,../pytestproject为上一层的pytestproject文件夹
testpaths = ../testcase
# 配置测试搜索的模块文件名称
python_files = test*.py
# 配置测试搜索的测试类名
python_classes = Test*
# 配置测试搜索的测试函数名
python_functions = test

参数详解

-s:表示输出调试信息,包括print打印。
-v:显示更详细的信息。
-vs:两个参数可以一起用。
-n:支持多线程或者分布式运行测试用例(如:pytest -vs ./testcase/test_login.py -n 2)
–reruns NUM:失败用例重跑。
-x:表示只要有一个用例失败,测试停止。
–maxfail=2:出现两个用例失败停止。
-k:根据测试用例的部分字符串指定测试用例(如:pytest -vs ./testcase -k “bai”)

3.运行顺序

(1)unittest:ascII的大小绝对的执行的顺序。
(2)pytest:默认从上到下。
pytest改变默认的执行顺序:使用mark标记,如下所示:

@pytest.mark.run(order=1)

4.分组执行(冒烟、分模块执行、分接口和web执行)

smoke:冒烟用例,分布在各个模块里
在pytest.ini中加入:

markers =smoke: 冒烟用例usermanage: 用户管理模块productmanage:商品管理模块

函数块加上分组:
@pytest.mark.smoke
@pytest.mark.usermanage
命令行输入:
pytest -vs -m “smoke”
pytest -vs -m “smoke or usermanage or productmanage”

5.pytest跳过测试用例

(1)无条件跳过

@pytest.mark.skip(reason="不合适")

(2)有条件跳过

@pytest.mark.skipif(age>=18,reason="已成年")

生成报告文件:

addopts = -vs --html ./report/report.html

6.使用@pytest.fixture()实现部分测试用例的前后置(固件、夹具)

(1)setup/teardown,setup_class/teardown_class

    def setup(self):print('\n在执行测试用例之前执行的代码:代开浏览器,加载网页')def setup_class(self):print('在每个类执行前的初始化工作:比如:创建日志对象、创建数据')def test_01_baidu(self):print('\n测试百度')def test_02_bilibili(self):print('\n测试哔哩哔哩')def teardown(self):print('\n在执行测试用例之后:关闭浏览器')def teardown_class(self):print('\n在每个类执行后的扫尾的工作:比如:销毁日志对象,销毁数据库的连接,销毁接口的请求对象')

(2)使用fixture()装饰器来实现部分用例的前后置

@pytest.fixture(scope="", params="", autouse="", ids="", name="")

scope:表示的是被@pytest.fixture标记的方法的作用域,function、class、module、package/session。
params:参数化(支持:列表[]、元祖()、字典列表[{},{},{}]、字典元祖({},{},{}))。
autouse=True:自动执行,默认False。
ids:当使用params参数化时,给每一个值设置一个变量名。
name:给表示的是被@pytest.fixture标记的方法取一个别名。

import pytest# @pytest.fixture(scope='function', params="", autouse="", ids="", name="")
@pytest.fixture(scope='function', params=['小明', '小王', '小红'], ids=['a', 'b', 'c'], name='aaa')
def my_fixture(request):# print('这是前后置的方法,可以实现部分以及全部用例的前后置')# yield# print('这是后置的方法')# print('前置')# yield# print('后置')return request.paramclass TestBeforeAfter:# def setup(self):#     print('\n在执行测试用例之前执行的代码:代开浏览器,加载网页')## def setup_class(self):#     print('在每个类执行前的初始化工作:比如:创建日志对象、创建数据')def test_01_baidu(self):print('测试百度')def test_02_bilibili(self, aaa):print('测试哔哩哔哩')# print('-----------' + str(my_fixture))print('-----------' + str(aaa))# def teardown(self):#     print('\n在执行测试用例之后:关闭浏览器')## def teardown_class(self):#     print('\n在每个类执行后的扫尾的工作:比如:销毁日志对象,销毁数据库的连接,销毁接口的请求对象')if __name__ == '__main__':pytest.main()

7.通过conftest.py和@pytest.fixture()结合实现全局的前置应用(如:项目的全局登录、模块的全局处理)

(1)conftest.py文件是单独存放的一个夹具配置文件,名称不能更改。
(2)用处可以在不用的py文件中使用同一个fixture函数。
(3)conftest.py需要和运行的用例放到统一层,并且不需要做任何的import导入的操作。
setup/teardown,setup_class/teardown_class:作用于所有用例或者所有的类。
@pytest.fixture():既可以作用于部分又可以作用于全部的前后置。
conftest.py和@pytest.fixture()结合使用,作用于全局的前后置。

8.断言

(1)assert

assert 1==2

9.生成allure测试报告

插件下载:allure-pytest。

(1)pytest-html

(2)allure-pytest

三、pytest实战

1.yaml接口自动化实战

(1)断言的封装

(2)allure报告的定制

(3)关键字驱动和数据驱动结合实现

(4)python的反射
通过对象的到类对象,再通过类对象调用方法。
(5)Jenkins的持续集成和allure报告集成,并根据自动化报告的错误率发送邮件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/52451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 波函数坍缩算法随机地图生成

Unity 波函数坍缩算法随机地图生成 波函数波函数基本概念位置空间波函数动量空间波函数两种波函数之间的关系波函数的本征值和本征态波函数坍缩 熵是什么熵作为状态函数时间之箭 实现原理举个例子:2D迷宫地图生成 Unity 如何实现前期准备单元格代码瓦片地图代码波函…

ComfyUI 常用的节点

总的来说,如果可以的话 最佳实践是直接访问每个节点仓库,仔细阅读作者提供的文档和说明。然后,手动执行 git clone 来获取仓库的代码。 接着,你可以通过手动执行 pip install -r requirements.txt 来安装每个项目的依赖。这种方法…

通过建模走出人工智能寒冬

很多人对 GenAI 是否会产生商业影响持怀疑态度,但我认为他们不仅错了,而且犯了 2001 年人们在互联网上犯下的错误。他们认为硅谷的炒作是无稽之谈,因此其背后的想法也是无稽之谈。 这是很危险的,我认为,这比大多数零售…

nacos 使用 docker 单机部署连接 MySQL 数据库并开启鉴权

文章目录 本地部署的配置启用鉴权(未验证) docker部署的配置修改docker 镜像源启用鉴权,必须添加如下环境变量如何生成鉴权的密钥 完整环境变量docker启动命令 本地部署的配置 文件结构 application.properties #配置文件 mysql-schema.sql …

WPS关闭后,进程依然在后台运行的解决办法

问题 wps启动后 在启动wps后,什么都不做,打开进程管理器,发现居然运行了3个wps进程: win10只会显示wps进程: win11显示比较准确: 关闭后 在关闭wps,再去任务管理器查看,发现在…

nvim变量命名风格的转换插件

变量命名风格的转换插件,可以在驼峰命名、混合命名和蛇形命名等风格之间相互转换 配置 lazy.nvim 使用默认快捷键 {"StubbornVegeta/style-transfer.nvim",event "BufEnter",config function()require("style_transfer").setup…

Python计算机视觉 第3章-图像到图像的映射

Python计算机视觉 第3章-图像到图像的映射 3.1 单应性变换 单应性变换(Homography)是计算机视觉中非常重要的一种几何变换,它用于将一个平面内的点映射到另一个平面内。具体来说,单应性变换可以描述一个图像在摄像机视角变化、…

vue3+vite+axios+mock从接口获取模拟数据实战

文章目录 一、安装相关组件二、在vite.config.js中配置vite-plugin-mock插件三、实现mock服务四、调用api接口请求mock数据方法一、直接使用axios 请求mock 数据方法二、对axios进行封装统一请求mock数据 五、实际运行效果 在用Vue.js开发前端应用时通常要与后端服务进行交互&a…

Linux Ubuntu 桌面环境概览

目录 一、Ubuntu桌面环境的特点:简约而不简单 二、Ubuntu桌面环境的组成:细节见真章 Ubuntu,这个名字在开源操作系统领域如同璀璨明星,以其卓越的桌面环境和用户体验赢得了全球用户的青睐。今天,就让我们一起深入探索…

图神经网络GNN的前世今生

GNN 图神经网络(Graph Neural Network,简称GNN)已经成为处理图形结构数据的一种强大工具,广泛应用于社交网络分析、知识图谱、推荐系统等领域。在本文中,我们将深入探讨图神经网络的历史背景、关键的发展阶段以及未来可…

强制输出wParam 和 lParam,会是什么内容?

当你“强制输出” wParam 和 lParam 时,通常是指在调试或日志记录中直接查看这些参数的原始数值。这些值的内容会根据消息类型的不同而有所变化,因为 wParam 和 lParam 的意义和使用取决于它们所在的消息上下文。 下面我将详细讨论在不同消息情况下&…

白酒与家庭聚会:温馨与和谐的时光

在繁忙的都市生活中,家庭聚会是每个人心中那份较温暖的港湾。每当夜幕降临,灯火通明,家人们围坐在一起,谈笑风生,那份温馨与和谐仿佛能够驱散一切疲惫。而在这个温馨的时刻,白酒——豪迈白酒(HO…

Python 爬虫入门(十二):正则表达式「详细介绍」

Python 爬虫入门(十二):正则表达式 前言一、正则表达式的用途二、正则表达式的基本组成元素2.1 特殊字符2.2 量词2.3 位置锚点2.4 断言2.5 字符集2.6 字符类2.6.1 基本字符类2.6.2 常见字符类简写2.6.3 POSIX字符类2.6.4 组合使用 三、 正则表…

如何使用ssm实现亿互游在线平台设计与开发+vue

TOC ssm118亿互游在线平台设计与开发vue 绪论 1.1研究背景 时代的发展,我们迎来了数字化信息时代,它正在渐渐的改变着人们的工作、学习以及娱乐方式。计算机网络,Internet扮演着越来越重要的角色,人们已经离不开网络了&#x…

2024世界机器人大会盛大开幕,卓翼飞思携无人智能领域产品集中亮相 !

开放创新 聚享未来!万众瞩目的2024世界机器人大会暨博览会于8月21日在北京亦创国际会展中心盛大开幕。大会聚焦机器人技术与产业前沿趋势,展示机器人创新应用赋能千行百业的多元场景,全球顶尖的机器人科学家、行业领袖、创新精英汇聚一堂&…

Pandas教程:使用Pandas合并多个Excel文件

目录 1. 环境准备 1.1 安装Pandas 1.2 准备工作 2. 基本概念 2.1 Pandas简介 2.2 DataFrame的基本操作 3. 读取Excel文件 4. 合并多个Excel文件 4.1 获取文件列表 4.2 读取并合并数据 4.3 处理重复数据 5. 数据存储 6. 完整示例代码 7.代码优化 7.1用类去重新组…

vue3动态引入图片不显示问题

方法1.(打包后动态引用的图片未被打包入工程中,webpack,vite) 1.图片放到public 目录会更省事,不管是开发环境还是生产环境,可以始终以根目录保持图片路径的一致. 假设: 静态文件目录:src/assets/images/ 我们的目标静态文件在 …

Python实现打印http请求信息例子解析

示例代码 import http.clientdef print_http_info(host, path):conn http.client.HTTPConnection(host)method GETurl pathprint(f"{- * 30} 请求信息 {- * 30}")print(f"主机: {host}")print(f"方法: {method}")print(f"URL: {url}&qu…

深入理解Spring Boot日志框架与配置

目录 Spring Boot日志框架概述Spring Boot默认日志框架:Logback日志配置文件日志级别的调整日志输出配置日志格式化日志轮转和归档集成其他日志框架日志管理工具最佳实践总结 Spring Boot日志框架概述 Spring Boot 支持多种日志框架,如 Logback、Log4…

使用HAL库实现按键控制LED和蜂鸣器

下载STM32CubeMX实现项目的初始配置(寄存器操作),下载keil对程序进行编译烧写 在STM32CubeMX中将PB0/PB1设置为输入引脚作为按键,PA6/PA4设置为输出引脚作为led和Beep,将按键引脚设置为上拉输入: 创建项目完成后在kei…