1. 第一个(或N个)测试失败后停止
在第一个(N)次失败后停止测试过程:
pytest -x # 遇到第一个失败时,停止 pytest --maxfail==2 # 遇到第二个失败时,停止
2.指定测试或选择测试
Pytest支持从命令行运行和选择测试的几种方法。
- 在模块中运行测试
pytest test_mod.py
- 在目录中运行测试
pytest testing/
目录级运行,即指定运行某一目录下所有测试集(以test_ 开头或者_test结尾的方法或者文件)方式
- 通过关键字表达式运行测试
pytest -k "MyClass and not method"
注意:执行当前目录下,名字包含
MyClass
但不包含method
的测试用例,所以上面的示例将运行,TestMyClass.test_something 但不会运行TestMyClass.test_method_simple。
- 按节点ID运行测试
每个收集的测试都分配有一个唯一的nodeid名称,该名称由模块文件名后跟说明符(例如类名,函数名和参数化参数)组成,并用::字符分隔。
要在模块中运行特定的测试,请执行以下操作:
pytest test_file::test_case
test_file,为.py文件
test_case, 为test_file.py中的一个测试用例
在命令行中指定测试方法的另一个示例:命令格式:pytest 文件名.py::测试类::测试方法
pytest test_mod.py::
TestSuite
::test_case
test_case,为TestSuite的成员函数
- 通过标记表达式运行测试
pytest -m slow
- 从包运行测试
pytest --pyargs pkg.testing
-
这将导入
pkg.testing
并使用其文件系统位置来查找并运行测试
3.从Python代码中调用pytest
pytest.main(["-x", "mytestdir"])
注意:调用pytest.main()将导致导入您的测试及其导入的任何模块。由于python导入系统的缓存机制,pytest.main()从同一进程进行后续调用不会反映两次调用之间对这些文件的更改。因此,pytest.main()不建议从同一进程进行多次调用(例如,以重新运行测试)。
4.修改Python回溯打印
pytest --showlocals # 打印本地变量 pytest -l # 打印本地变量 pytest --tb=auto # 默认模式 pytest --tb=long # 尽可能详细的输出 pytest --tb=short # 更简短的输出 pytest --tb=line # 每个失败信息总结在一行中 pytest --tb=native # Python 标准输出 pytest --tb=no # 不打印失败信息
--full-trace
是一种比--tb=long
更详细的输出模式。它甚至能观察到用户打断执行(Ctrl+C
)时的回溯信息,而上述六种模式默认是不输出此类信息的。
5.分析测试执行持续时间
要获取最慢的10个测试持续时间的列表:
pytest --durations=10
默认情况下,除非
-vv
在命令行中传递,否则pytest不会显示太短的测试持续时间(<0.01s)
6.获取版本,选项名称,环境变量
pytest --version # 获取版本 pytest --fixtures # 显示可用的内置函数参数 pytest -h | --help # 帮助
7.通过python -m pytest
调用pytest
可以从命令行通过Python解释器调用测试:
python -m pytest [...]
但是,这和直接执行pytest [...]
命令的效果几乎是一模一样