一、pytest 默认约定:
(1)pytest将在当前目录及其子目录中运行所有格式为test_*.py和*_test.py的文件
如果发现只执行当前文件,可能是设置问题:
file---setting---tools---python integrated tools---test---default test runner中设置为unittests即可
(2)测试方法|函数必须是test开头
(3)测试类必须是Test开头
(4)assert 直接添加至测试用例后面,失败测试结果是F,成功就是.
(5)pytest测试类中一定不能有构造方法__init__(self):,pytest不允许使用构造方法
二、pytest常见应用汇总:
1、断言机制 pytest的断言就是应用python的运算符号和assert关键字来实现
测试相等: ==
测试不相等: !=
测试大于等于: >=
测试小于等于: <=
测试包含: in
测试不包含: not in
测试是否为True: is True
测试是否不为True: is not True / is False
2、常用运行参数
(1)-s 用于关闭捕捉,从而输出打印信息,
如果没有-s而是输入pytest.main(['--html=./report.html'])则会将测试结果输出到html文件中
如果有了-s 则不会输出到html,而是输出到终端
注:前提是安装pytest-html插件 pip install pytest-html
(2)-v 用于显示具体的信息
(3)-k 用于执行用例名称中包含某字符段的用例,比如pytest(['-k','abc'])执行测试用例名称中包含abc字符的用例
(4)-q 简化输出信息 输出结果就是简单的F和.(F代表用例失败,.代表用例成功通过)
(5)-x 一旦出现测试用例失败,后面的用例就不执行
(6)精准选择执行的用例 pytest.main(['-s',"文件名.py::用例名称"])
(7)生成JUnit XML测试报告 pytest.main(['--junit-xml=./report/junit_report.xml'])
(8)设置失败两次就结束所有测试 pytest.main(['--maxfail=2'])
(9)通过标记表达式来选择执行的测试用例
1)首先写一个测试配置文件.ini文件,格式大概是
[pytest]
markers =
标签名: 描述信息
slow: mark tests as slow
smoke: mark tests as smoke
2)在测试用例添加标记装饰器@pytest.mark.slow(slow是标签名)
3)main函数写作:pytest.main(['-m', 'slow'])
(10)多进程运行用例:运行失败
1)安装插件 pip install pytest-xdist
2)运行模式 pytest -n NUMCPUS,pytest.main(['-n', '2'])
(11)失败用例重新运行
1)安装插件 pip install pytest-rerunfailures,是一个可以使pytest 重新运行的插件,消除间歇性故障
2)pytest.main(['reruns', '3', '--reruns-delay', '2', 'test*.py'])
失败用例重新运行 '3'是重新运行次数,--reruns-delay 设置重跑延迟时间 '2'就是延迟时间 最后是运行测试文件
(12)setUp和tearDown
1)测试用例中没有类时
第一批次:setup_module和teardown_module 在当前文件中在所有测试用例执行之前和之后执行
第二批次:setup_function和teardown_function 在每个测试函数之前和之后执行
第三批次:setup和teardown 在每个测试函数之前和之后执行,这个可以作用于类方法
PS:执行顺序按照批次顺序来,即使更改方法位置,执行顺序不变
2)测试用例中有类时
第一批次:setup_class和teardown_class 在当前文件中在所有测试用例执行之前和之后执行,必须有@classmethod装饰器
第二批次:setup_method和teardown_method 在每个测试函数之前和之后执行
第三批次:setup和teardown 在每个测试函数之前和之后执行,这个可以作用于类方法
(13)pytest配置文件 可以在配置文件中设置默认参数,还有执行文件,执行类名,执行测试方法名等
1)配置文件大概格式
[pytest]
# 01 命令行参数默认加到执行过程中
addopts = -s -v --html=./report/html_report.html
# 02 指定要运行的测试目录
testpath = ./scripts
# 03 指定要运行的文件规则
python_files = auto*.py
# 04 指定要运行的类的名称规则
python_classes = Auto* B*
# 05 指定要运行的测试方法的名称规则
python_functions = auto_*
(14)pytest插件 pytest-html插件
1)安装 pip install pytest-html
2)--html=用户路径/html_report.html
ps:生成报告的同时还有一个asset的css文件
(15)pytest获取用例执行性能数据以及pytest禁用插件
查看最慢的10个用例 pytest --durations=10
关闭插件,比如关闭doctest pytest -p no:doctest
3、pytest跳过用例机制
1.有条件跳过测试函数 根据特定的条件,跳过某些测试函数.
方法:
skipif(condition, reason=None)
参数:
condition:跳过的条件,必传参数
reason:标注原因,必传参数
使用方法:
@pytest.mark.skipif(condition, reason="xxx")装饰测试用例
2.无条件跳过测试函数
@pytest.mark.skip(reason="no reason") 可传入一个非必须参数reason表示原因
4、pytest函数数据参数化
(1)单个数据参数化
@pytest.mark.parametrize(argnames,argvalues)
有多少个values就会执行多少次用例
@pytest.mark.parametrize('a', ['aaa', 'bbb', 'ccc'])
a 是形参,后面aaa,bbb,ccc是实参
(2)多个数据参数化
@pytest.mark.parametrize('user, password', [('xuzhu', '123456'), ('zhanzhao', '123456'), ('simple', '123456')])
user和password是形参,中括号里的实参
|