//在pytest测试框架中,要遵循以下约束:
测试文件名要符合test_*.py或*_test.py格式(例如test_min.py)
测试类要以Test开头,且不能带有init方法
在单个测试类中,可以包含一个或多个test_开头的函数
//命令行执行用例,mian里面参数详解
main()括号内可传入执行参数和插件参数,通过[]进行分割,[]内的多个参数通过‘逗号,’进行分割
运行目录及子包下的所有用例 pytest.main(['目录名'])
运行指定模块所有用例 pytest.main(['test_reg.py'])
运行指定模块指定类指定用例 pytest.main(['test_reg.py::TestClass::test_method']) 冒号分割
-q: 安静模式, 不输出环境信息
-v: 丰富信息模式, 输出更详细的用例执行信息 最高级别信息 — verbose
-s: 显示程序中的print/logging输出
-k: 来挑选要执行的测试项,后面接的名称可以为函数名称、类名称、文件名称、目录名称,支持模糊查询
-m: 运行打标签的用例,后面接标签名称
-x: 出现一个用例失败则停止执行测试用例
--resultlog=./log.txt 生成log
--junitxml=./log.xml 生成xml报告
--html=./log.html 生成html报告;上面方法生成的报告,css是独立的,可以把css样式合并到html里,再加一个参数--self-contained-html
--maxfail=num 表示用例失败总数等于num 时停止运行
--tb=line 错误信息在一行展示
//pytest断言主要使用Python原生断言方法,主要有以下几种:
== 内容和类型必须同时满足相等
in 实际结果包含预期结果
is 断言前后两个值相等
//初始化和清除环境
1、方法级别初始化、清除 setup 和 teardown
2、类级别初始化、清除 def setup_class(cls) 和 def teardown_class(cls)
3、模块级别初始化、清除 设置全局方法 def setup_module() 和 def teardown_module()
//注册标签名,只需要在项目根目录下创建一个pytest.ini文件
//fixture测试夹具详解
https://www.cnblogs.com/miki-peng/p/14736425.html
//allure生成报告
pytest -v test_cpm.py --alluredir=D:py_learn_pmlearn_pytestreports --clean-alluredir
--alluredir=./report/result 指定报告生成的路径;执行完命令后,report目录下生成一个result目录文件;result下只是一些测试报告的原始数据,还不能作为html报告打开。
--clean-alluredir 防止文件累积
在dos命令行执行下面的命令
allure generate D:/py_learn_pm/learn_pytest/reports -c -o D:/py_learn_pm/learn_pytest/reports/result
allure generate --> allure 生成报告的命令,固定写法
./result --> 获取报告数据的 json 文件目录
-c --> 每次执行后清空报告目录
-o --> 输出报告命令
./report --> 报告存放目录
//用例执行失败后重试
需要安装pytest-rerunfailures
命令行参数:--reruns n(重新运行次数),--reruns-delay m(等待运行秒数)
重新运行指定的测试用例,需要添加flaky装饰器 @pytest.mark.flaky(reruns=5) ,并在测试失败时自动重新运行,需要指定最大重新运行的次数
//重复执行用例
需要安装pytest-repeat
命令行执行:--count=5
如果要在代码中将某些测试用例标记为执行重复多次,可以使用 @pytest.mark.repeat(count)
--repeat-scope
命令行参数,可以覆盖默认的测试用例执行顺序,类似fixture的scope参数
function:默认,范围针对每个用例重复执行,再执行下一个用例
class:以class为用例集合单位,重复执行class里面的用例,再执行下一个
module:以模块为单位,重复执行模块里面的用例,再执行下一个
session:重复整个测试会话,即所有测试用例的执行一次,然后再执行第二次
//多线程或多进程执行测试用例
方式一:需要安装pytest-parallel
–workers=n *:多进程运行需要加此参数, n是进程数。默认为1,windows系统中只能为1
–tests-per-worker=n *:多线程运行, n是每个worker运行的最大并发线程数。默认为1
方式二:需要安装pytest-xdist
-n=3 指定进程数,如 -n=4 表示开启4个cpu进行执行测试用例
pytest-xdist 只支持多进程执行测试用例,不支持多线程执行
//控制用例的执行顺序
需要安装pytest-ordering
1. pytest 框架用例默认情况从上往下执行
2. 加上 @pytest.mark.run(order=3) 装饰器之后,执行顺序按照按照 order 值 从小往大执行
3. 先执行加了排序装饰器的,剩余按照默认顺序执行
//控制用例的依赖关系
需要安装pytest-dependency
设计测试用例的时候进可能不要让用例有顺序,不要让测试用例有依赖关系,如果无法做到,可以临时的用插件解决
pytest-dependency 要做的就是,让他们之间存在一种依赖关系:一旦用例A失败,那么用例B也不会执行
//断言1失败会继续执行后续代码断言2
https://blog.csdn.net/qq_36502272/article/details/106362652
需要安装pytest-assume
pytest.assume(1==4) 相当于 assert 1==4
//用例随机执行
需要安装pytest-random-order
//conftest.py + fixture
在conftest.py文件里面所有的方法在调用时都不需要导包
setup,teardown,setup_class,teardown_class,fixture优先级:
会话:fixture 的session级别的优先级最高
类:fixture的class级别最高
类:setup_class
函数:fixture 的function级别最高
函数:setup