文章目录
从命令行通过python解释器调用测试
python -m pytest […]
等同于直接调用命令行脚本pytest […] ,除了通过python调用也将当前目录添加到sys.path
退出代码
退出代码0:收集并成功通过所有测试
退出代码1:手机并运行测试但是有一些测试失败了
退出代码2:用户中断了测试执行
退出代码3:执行测试时发生内部错误
退出代码4:pytest命令行使用错误
退出代码5:没有收集任何测试
获取有关版本,选项名称,环境变量的帮助
pytest --version #显示从哪里导入pytest
pytest --fixtures #显示可用的内置函数参数
pytest -h #显示命令行和配置文件的帮助
在第一次或n次失败后停止
pytest -x #在第一次失败后退出
pytest --maxfail=2 #在第二次失败后退出
指定测试/选择测试
- 在模块内运行测试
pytest test_mod.py
- 在目录中运行测试
pytest testing/
- 按关键字表达式运行测试
pytest -k "MyClass and not method"
会运行TestMyClass.test_something
但不会运行TestMyClass.test_method_simple- 运行包含与给定字符串表达式匹配的名称的测试
包括使用文件名、类名和函数名作为变量的Python运算符
- 按节点id运行测试
每个收集的测试都分配了一个唯一的nodeid,包含模块文件名,后跟说明符,如类名,函数名和参数化参数,用::字符分隔- 在模块中运行特定测试
pytest test_mod.py::test_func
#运行test_mod.py文件中test_func函数 - 在命令行中指定测试方法
pytest test_mod.py::TestClass::test_method
#运行test_mod.py文件中TestClass类中test_func函数
- 在模块中运行特定测试
- 通过标记表达式运行测试
pytest -m slow
将运行@pytest.mark.slow装饰器装饰的所有测试(@pytest.mark.为标记) - 从包中运行测试
pytest --pyargs pkg.testing
将导入pkg.testing包并使用其文件系统位置来查找和运行测试
修改python回溯打印
- 示例
pytest --showlocals #在回溯中显示局部变量
pytest -1 #显示局部变量(快捷方式)
pytest --tb = auto #(默认)'long’追溯第一个和最后一个
#entry,但其他条目的’short’样式
pytest --tb = long #详尽,信息丰富的回溯格式
pytest --tb = short #较短的追溯格式
pytest --tb = line #每次失败只有一行
pytest --tb = native #Python标准库格式
pytest --tb = no #根本没有回溯 - -full-trace导致在错误时打印非常长的跟踪(长于–tb = long)。 它还确保在KeyboardInterrupt(Ctrl + C)上打印堆栈跟踪。 如果测试花费的时间过长,并且使用Ctrl + C中断它们以找出测试挂起的位置,这非常有用。 默认情况下,不会显示任何输出(因为python会捕获KeyboardInterrupt)。 通过使用此选项,您可以确保显示跟踪
详细的总结汇报
版本2.9中的新功能
- -r标志可用于在测试会话结束时显示测试结果摘要,从而可以在大型测试套件中轻松获得所有的 failures, skips, xfails等的图像
- -r选项在它之后接受许多字符
f - failed 失败
E - error 错误
s - skipped 跳过
x - xfailed
X - xpassed
p - passed 通过
P - passed with output 通过输出传递
a - all except pP 除了传递之外的所有字符 - 可以使用多个字符
例如,pytes -rfs 只查看失败和跳过的测试
在失败时丢弃到pdb(python调试器)
python附带一个名为pdb的内置python调试器,pytest允许用户通过命令行选项进入pdb提示符
- 命令:pytest --pdb
这将在每次失败时调用Python调试器(或KeyboardInterrupt)
命令:pytest -x --pdb #只在第一次失败的测试中执行此操作 - 命令:pytest --pdb --maxfail = 3#在前三次失败时调用
- 注意:
- 在任何失败时调用,异常信息都存储在sys.last_value、sys.last_type和sys.last_traceback
- 在交互式使用中,这允许用户使用任何调试工具进行事后调试,也可以手动访问异常数据
import sys
sys.last_value
在测试开始时删除pdb
python允许用户通过命令行选项在每次测试开始时立即进入pdb提示符
pytest --trace
这将在每次测试开始时调用Python调试器
设置断点
要在代码中设置断点,请在代码中使用本机Python调用,pytest会自动禁用该测试的输出捕获:import pdb;pdb.set_trece()
- 其他测试中的输出捕获不受影响
- 任何先前的测试输出已经被捕获并将被处理
- 在同一测试中生成的任何后续输出都不会被捕获,而是直接发送到sys.stdout
- 注意:即使对于退出交互式pdb跟踪会话并继续常规测试运行后发生的测试输出,这也适用
使用内置断点功能
Python3.7引入了内置breakpoint()函数,pytest支持适用breakpoint()以下行为
- 当breakpoint()调用并PYTHONBREAKPOINT设置为默认值时,pytest将使用自定义内部pdb跟踪UI而不是系统默认的pdb
- 测试完成后,系统将默认返回系统pdb跟踪UI
- 随着–pdb传递给pytest,自定义内部pdb跟踪ui使用既breakpoint()和失败的测试/未处理的异常
- –pdbcls可用于指定自定义调试器类
分析测试执行持续时间
pytest --durations=10
获得最慢的10个测试持续时间的列表
默认情况下,除非运行-vv,否则pytest不会显示太小的测试持续时间(<0.01s)
创建JUint xml格式文件
要创建可由Jenkins或其他continuous集成服务器读取的结果文件,可使用此调用
pytest -- junitxml=path
(未完待续)
创建结果日志格式文件
不推荐使用,4.0版本会删除
pytest --resultlog=path
将测试报告发送到在线的pastebin服务
- 为每个失败测试创建一个url
pytest --pastebin=failed
- 为整个测试会话日志创建url
pytest --pastebin=all
禁用插件
要在调用时禁用加载特定插件,请将该-p选项与前缀一起使用no:
pytest -p no:doctest #禁用加载插件doctest,负责从文本文件执行doctest测试,调用pytest
从python代码中调用pytest
2.0版本的新功能
命令:pytest.main()
- 介绍
这就像你从命令中调用“pytest”一样,不会raise SystemExit而是返回exitcode
可以传入选项和参数pytest.main(['-x','mytestdir'])
- pytest.main可以指定其他参数
- 注意
调用pytest.main()将导致导入测试及其导入的任何模块
由于python导入系统的缓存机制,pytest.main()从同一进程进行后续调用不会反应调用之间对这些文件的更改
因此pytest.main()不建议从统一进程进行多次调用(例如,为了重新运行测试)