pytest是一个非常成熟的全功能的Python测试框架 。文本记录该框架的使用方法。
简介
- pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:
- 简单灵活,容易上手
- 支持参数化
- 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest requests)
- pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等
- 测试用例的skip和xfail处理
- 可以很好的和jenkins集成
- report框架----allure 也支持了pytest
- 官方文档: https://docs.pytest.org/en/latest/contents.html
pytest 规范
- pytest 在自动测试时需要遵循一定规则,这些规则可以修改,默认情况为:
- 所有的单测文件名都需要满足
test_*.py
格式或*_test.py
格式。 - 在单测文件中,测试类以
Test
开头,并且不能带有__init__
方法 注意:定义class时,需要以大写T开头 - 在单测类中,可以包含一个或多个
test_
开头的函数。 - 在执行pytest命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。
- 所有的单测文件名都需要满足
安装
- 默认情况下 python 自带 pytest 框架,可以通过命令进行升级安装
pip install -U pytest
- 验证安装
pytest --version
输出 pytest 版本表明安装成功
代码语言:javascript复制C:UsersAdministrator>pytest --version
pytest 6.2.5
运行方式
测试类主函数模式
- 可以在 python 中执行 pytest 命令
- 引入 pytest 包,在python 中执行代码
pytest.main("-s test_abc.py")
命令行模式
- 直接执行命令
pytest 文件路径/测试文件名
pytest ./test_abc.py
- console中的指令
指令含义 | 指令 |
---|---|
用于详细显示日志信息 | -v |
测试结果的简单统计 | -rA |
只显示整体测试结果 | -q |
帮助 | -h |
显示print打印信息 | -s |
输出html格式报告 | –html=path输出路径 |
生成log报告 | –resultlog=./log.txt (6.1 版本之后被删除) |
生成xml报告 | –junitxml=./log.xml |
当错误达到num时,停止测试 | –maxfail=num |
只运行有MARKEXPR(自定义)标记的测试 | -m MARKEXPR |
生成简略的指定需求的报告 | -r option |
函数数据参数化
- 方便测试函数对参数的调用:
@pytest.mark.parametrize(argnames,argvalues, indirect=False, ids=None, scope=None)
argnames:参数名
argvalues:参数对应值,可传多个值,类型必须为list [(values1,values2,…),(value1,value2,…)]
pytest 会将定义好的参数列表逐个填入到参数位置中执行代码,有多少个执行多少遍
- 参数传递
import pytest
'''
parametrize
'''
class Test02:
def setup_class(self):
print("---------setup_class----------")
def teardown_class(self):
print("------------teardown_class-------------")
# 传递单参数
@pytest.mark.parametrize("a",[3,6])
def test_09(self,a):
print("a = %d" % a)
assert a%3 == 0
# 传递多参数
@pytest.mark.parametrize('a,b',[(0,3),[1,2]])
def test_10(self,a,b):
print("%d %d = %d" % (a,b,a b))
assert a b == 3
if __name__ == "__main__":
pytest.main(['-s','-v','test_case05.py::Test02::test_10'])
多进程运行cases
- 当cases量很多时,运行时间也会变的很长,如果想缩短脚本运行的时长,就可以用多进程来运行。
- 安装pytest-xdist:
pip install -U pytest-xdist
- 运行方法
pytest test_se.py -n NUM
其中NUM填写并发的进程数。
参考资料
- https://zhuanlan.zhihu.com/p/356599211
- https://blog.csdn.net/IT_LanTian/article/details/121356143
- https://blog.csdn.net/weixin_42724501/article/details/116562575