pytest框架-常见参数、配置文件、高级参数化和报告生成
pytest 安装
a)安装
pip install pytest
b)验证安装
pytest --version
1、pytest的⽤例运⾏规则
1)pytest将在当前⽬录及其⼦⽬录中运⾏所有格式为test_.py或者_test.py⽂件
2)测试⽅法/测试函数 默认必须是test开头
3) 测试类必须是Test开头
4) 测试类不能有构造⽅法 init,会影响用例的收集
2、pytest常⽤运⾏参数
"-s" 参数 ⽤于关闭捕捉,从⽽输出打印信息到控制台,如果不输入【-s】,测试报告中会捕捉打印信息,输入后不再捕捉打印信息
"-v" 参数 ⽤于显⽰具体的⽤例执⾏信息‘
“-k” 参数+用例名:运⾏名称中包含某字符串的测试⽤例
"-q"参数:简化输出信息
“-x” 参数: 如果出现⼀条测试⽤例失败,则退出测试
指定⽬录以及特定类或⽅法执⾏
pytest.main(['-s','./doc/test_112233.py::TestDemo::test_case_03'])
3、执行顺序-层级关系
使用main运行的时候,是按照层级依次往下查找的,不会往上查找(***同一个目录下,最好只有一个main文件和用来执行框架***)
if __name__ == '__main__':
pytest.main(['-s'])
图中这种层级,运行了4个同级的文件和一个下级test_112233.py文件,自动寻找Test_开头或者_Test结尾的类,和test_开头或_test结尾的方法/函数。
4、生成简单报告
pytest.main(['--junit-xml=./report/junit_report01.xml'])
5、执行失败控制
# 用例失败控制
# pytest.main(['--maxfail=1']) # 执行的时候最大失败次数为1,失败1条就停止运行。
6、通过标记表达式取执行
通常用来版本控制,比如V1.0和V2.0版本的用例在一个文件中,只想执行V2.0的时候,表达式取V2.0
先在项目中建立一个简单文件,命名为pytest.ini 的配置文件。写入一些信息。如下:
(***同一个目录下,最好只有一个main文件和pytest.ini用来执行框架***)
[pytest]
markers =
smoke: marks tests as smoke
slow
happy
serial
然后在脚本文件的用例前加装饰器
然后执行,用标记表达式执行
# pytest.main(['-m', 'smoke'])
7、指定.py文件执行
if __name__ == '__main__':
pytest.main(['test_many.py']) # 直接填写[".py文件名"]
8、多线程执行
# 需要先安装对应插件 pytest-xdist: pip install pytest-xdist(不安装会报错)
# 将测试执行发送给多个CPU
# pytest.main(['-n', '2', 'test_many.py'])
# 使用与计算机具有CPU内核一样多的进程
# pytest.main(['-n', 'auto', 'test_many.py'])
9、失败重新运行用例
pytest-rerunfailures是⼀个可以使pytest重新运⾏测试的插件,以消除间歇性故障。
安装要求:
您需要具备以下先决条件才能使⽤pytest-rerunfailures:
安装:pip install pytest-rerunfailures
Python 3.5,最⾼3.8或PyPy3
pytest 5.0或更⾼版本
if __name__ == '__main__':
# 重新运行失败的用例,指定失败次数最大为3
# pytest.main(['--reruns', '3', 'test_rerun.py'])
# 在每次失败重跑之前,增加一个延迟时间
pytest.main(['--reruns', '3', '--reruns-delay', '2', 'test_rerun.py'])
10、pytest的setup和teardown函数
***自动化中的用途,举例:比如setup用作用例执行前的数据处理,,teandown用来关闭浏览器***
不同的setup函数不要混用,在最新版本中,是不支持混用的
setup_module/teardown_module:在当前文件中,所有的用例执行之前执行
setup_function/teardown_function:在每个测试函数之前和之后执行
setup_method/teardown_method:在每个测试函数之前和之后执行(在类中每次都执行,在类的外面,只执行一次)
类的里面:setup和teardown每次都执行
11、pytest配置⽂件
pytest.ini全局配置文件,是pytest单元测试框架的核心配置文件
作用:pytest.ini 可以改变 pytest 的默认行为
位置:一般放在项目的根目录(即当前项目的顶级文件夹下)
命名:pytest.ini,不能使用任何中文符号,包括汉字、空格、引号、冒号等等
新建配置文件,点击鼠标右键(New->File->pytest.ini)
编码格式:GBK或者ANSI,可以使用notepad++修改编码格式
运行的规则:不管是主函数模式运行,命令行模式运行,都会去读取这个全局配置文件。
格式一般是固定的,建议将中文删掉:
————————————————
版权声明:本文为CSDN博主「福多多的福」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Moonlight_16/article/details/122706934
[pytest]
;addopts:配置命令行参数,用空格进行分隔
;可执行标记为mark的对应用例,用or表示标记为demo或者smoke的用例都会执行
addopts = -vs --alluredir=./results/json --clean-alluredir -m "demo or smoke" # 这里输入了命令,pytest.main()中就不需要输入前面的参数了
;注册 mark 标记
markers =
demo : marks tests as demo
smoke: marks tests as smoke
uat : marks tests as uat
test : marks tests as test
minversion = 5.0 # 设置pytest的最低版本是5.0
;测试用例的路径,可自己配置,
;../pytestproject为上一层的pytestproject文件夹
;./testcase为pytest.ini当前目录下的同级文件夹
;改变用例的查找路径规则,当前目录的testcase文件夹
testpaths =./testcase # 这里设置了执行路径后,就会按照设置路径为准去找设置路径下的执行文件进行执行,这里只会查找testcase目录及子目录下的文件
;模块名的规则,配置测试搜索的模块文件名称 python_files = test*.py # 这里如果改成auto_*.py 则不会执行test_*开头的文件了,而是执行auto_*开头的文件
;类名的规则,配置测试搜索的测试类名 python_classes = Test* # 这里如果改成auto_*.py 则不会执行test_*开头的测试类了,而是执行auto_*开头的测试类
;方法名的规则,配置测试搜索的测试函数名 python_functions = test # 这里如果改成auto_*.py 则不会执行test_*开头的方法了,而是执行auto_*开头的方法
12、pytest-html插件(测试报告)
pytest-html插件 安装: pip install pytest-html 使⽤⽅法: 命令⾏格式:pytest --html=⽤户路径/report.html
13、Pytest⾼阶⽤法之函数数据参数化
⽅法: parametrize(argnames, argvalues, indirect=False, ids=None, scope=None) 常⽤参数: argnames:参数名 argvalues:参数对应值,类型必须为list 当参数为⼀个时格式:[value] 当参数个数⼤于⼀个时,格式为:[(param_value1,param_value2.....), (param_value1,param_value2.....)] 使⽤⽅法: @pytest.mark.parametrize(argnames,argvalues) 参数值为N个,测试⽅法就会运⾏N次
取多个值
单个变量,多个value,元组中的value取单个值
变量数量=value数量的情况下,元组中的value,value直接用数组的方式
单个变量,列表里有多个VALUE
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!