pytest-执行参数
前言
pytest提供一些执行参数,来帮助用户更好地定位问题(详细信息打印或报错的详细信息)和更高效地执行测试用例(多线程执行测试用例,跳过测试用例等),例如,上一章中测试用例函数中有print,但执行pytest后,输出log中却没有打印出来。
可以在cmd中输入
pytest -h
来查看有哪些pytest的可执行参数
pytest 执行参数
pytest常用执行参数:
-s:详细内容,将print的内容打印出来等-x:遇到错误的用例,立即退出执行,并输出结果
-k:执行指定的用例项,可以是测试函数名,也可以是类名,也可以是模块名,以及目录名称,例如:pytest -k "test_03"也可以加入not来不执行一些用例,例如:pytest -k "not test_03"也可以通过 模块::类::用例 来执行指定用例,例如:pytest test_cmd_arg.py::Test_01::test_03
-m:执行被标记的用例,标记需要用到pytest的装饰器@pytest.mark.标记名称
-v:查看详细的报告内容
-q:查看简洁的测试报告
--collect-only:把待执行的用例全部展示出来
--maxfail=n:运行失败n次后,停止测试
--lf:只执行上次失败的用例
--tb=no:不展示用例失败的错误详情。 --tb=line:展示用例失败的具体行数 --tb=short:展示更加详细的错误信息
--durations=N:把最耗时间的用例N个用例展示出来,N表示最慢的几个
话不多说,直接上测试用例,动手实操,
test_cmd_arg.py:
import pytest class Test_01: def test_01(self): print('test_01执行') assert 1 == 1 def test_02(self): print('test_02执行') assert 2 == 2 def test_03(self): print('test_03执行') assert 3 == 4 if __name__ == '__main__': pytest.main(['-s'])
-s:详细内容,将print的内容打印出来等
可以直接在pytest.main()中输入-s参数,例如pytest.main(['-s']),但还是推荐在cmd中执行pytest 再加上执行参数,下面推荐2种方式快速打开当前路径的cmd窗口
1、pycharm中,在测试用例文件处鼠标右键-Open in Terminal
2、打开测试用例文件路径的文件夹管理系统,直接在路径输入框中输入cmd命令回车
输出结果:
可以看到test_1.py和test_cmd_arg.py中测试用例的print中的内容都已打印
-x:遇到错误的用例,立即退出执行,并输出结果
将test_cmd_arg.py::Test_01::test_02中的assert的结果改为2 ==3,再执行pytest -x
输出结果:
可以看到test_cmd_arg.py::Test_01::test_02报错后,直接退出执行,test_cmd_arg.py::Test_01::test_03并没有被执行
-k:执行指定的用例项,可以是测试函数名,也可以是类名,也可以是模块名,以及目录名称,例如:pytest -k "test_03" (必须是双引号!!)
pytest -k "test_03"输出结果如下:
可以看到只执行测试用例函数名为test_03的用例,其余搜索到的测试用例直接跳过
也可以加入not来不执行一些用例,例如:pytest -k "not test_03"
执行结果如下:
test_03的测试用例因为只有test_cmd_arg.py::Test_01中存在,所以直接跳过1个用例
补充:
除了-k参数执行指定用例外,可以通过 模块::类::用例 来执行指定用例,例如:pytest test_cmd_arg.py::Test_01::test_03
-m:执行被标记的用例,标记需要用到pytest的装饰器@pytest.mark.标记名称
在Fail的测试用例加上@pytest.mark.Fail的装饰:
class Test_01: def test_01(self): print('test_01执行') assert 1 == 1 @pytest.mark.Fail def test_02(self): print('test_02执行') assert 2 == 3 @pytest.mark.Fail def test_03(self): print('test_03执行') assert 3 == 4 if __name__ == '__main__': pytest.main()
在cmd中执行pytest -m Fail
可以看到2个用例均已执行,其余用例跳过
-v:查看详细的报告内容
-q:查看简洁的测试报告

可以看到,缺少了之前的环境打印,但FAILED的测试用例具体位置还是打印出来了
--collect-only:把待执行的用例全部展示出来
--maxfail=n:运行失败n次后,停止测试
将maxfail=1,设置为运行失败一次后,立马退出执行,可以看到test_cmd_arg.py::Test_01::test_02执行失败后,执行就退出了,test_cmd_arg.py::Test_01::test_03并没有被执行
--lf:只执行上次失败的用例
--tb=no:不展示用例失败的错误详情
可以看到错误代码行数、错误代码以及错误类型都没有打印
--tb=line:展示用例失败的具体行数
打印出了具体行数,但错误代码以及错误类型还是没有打印
--tb=short:展示更加详细的错误信息
错误信息打印与正常执行pytest打印出来的错误信息基本一致了
--durations=N:把最耗时间的用例N个用例展示出来,N表示最慢的几个
给其中一个测试用例加上time.sleep(2),强制休眠2s,具体示例:
@pytest.mark.Fail def test_03(self): print('test_03执行') time.sleep(2) assert 3 == 4
在cmd中执行pytest --durations=1,将最慢的一个测试用例展示出来,那么非test_03莫属,毕竟强制休眠了2s,执行结果如下
可以看到slowest 1 durations下已经打印出最慢的测试用例,已经所运行的性能时间
常用的pytest执行参数就如上这些,如果有需要了解的其他执行参数,可在pytest -h中查询
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界