Pytest入门系列之pytest的基本命令
Pytest入门系列之pytest的基本命令
pytest 作为一个强大的测试框架,提供了非常丰富的命令参数,这些命令在我们日常工作中可以大大的帮助到我们!
运行测试的基本命令
运行所有测试
1 |
|
pytest
会自动搜索当前目录及其子目录中所有符合 test_*.py
或 *_test.py
规则的测试文件,并执行其中的测试函数。
运行指定测试文件
1 |
|
仅运行 test_sample.py
文件中的测试。
运行特定的测试类
1 |
|
仅运行 test_sample.py
中 TestClass
内部的测试方法。
运行特定的测试函数
1 |
|
仅运行 test_sample.py
中 test_function
这个测试。
测试选择与过滤
通过 -k 关键字匹配
1 |
|
只运行名称包含 "addition"
的测试函数。
1 |
|
运行名称包含 add
或 sub
的测试。
1 |
|
排除名称包含 "multiplication"
的测试。
通过 -m 运行特定标记的测试
1 |
|
仅运行 @pytest.mark.slow
标记的测试。
1 |
|
控制测试执行
失败后立即停止
1 |
|
第一个测试失败后立即停止。
1 |
|
允许最多 3 个测试失败,超过就停止。
只运行上次失败的测试
1 |
|
仅运行上一次失败的测试(last failed)。
1 |
|
先运行上次失败的测试,再运行其他测试(failed first)。
@pytest.mark.skip 无条件跳过
@pytest.mark.skip
直接跳过测试,不执行该测试函数。适用于测试暂时无意义的情况。
1 |
|
@pytest.mark.skipif(condition, reason=”…”) 条件跳过
skipif
允许根据特定条件决定是否跳过测试。例如:
仅在特定 Python
版本下跳过测试。
仅在 Windows
环境下跳过测试。
1 |
|
1 |
|
@pytest.mark.xfail 预期失败
xfail(expected failure)
用于标记 已知可能失败的测试,但仍然让它运行。
测试通过:显示 XPASS
(意外通过)。
测试失败:显示 XFAIL
(符合预期的失败)。
1 |
|
不会影响整体测试通过率(即便失败,pytest 也不会将其视为真正的失败)。
xfail 结合 condition
1 |
|
仅在 Windows 下 xfail,其他平台不会受影响
strict=True 让 XPASS 变成失败
默认情况下,如果 xfail 标记的测试 意外通过(XPASS),pytest 仍认为测试通过。但可以使用 strict=True 强制失败:
1 |
|
详细度与输出控制
增加详细信息
1 |
|
显示更详细的测试结果,包括每个测试的名称和状态。
1 |
|
只显示必要的信息(安静模式)。
显示 print 语句输出
1 |
|
允许测试过程中 print() 的输出(默认 pytest 会捕获并隐藏)。
配置失败信息
控制回溯(traceback)信息
1 |
|
显示精简的错误信息。
1 |
|
显示完整的回溯信息(默认)。
1 |
|
只显示一行错误信息。
1 |
|
不显示错误回溯信息。
运行速度与性能优化
只收集测试但不执行
1 |
|
仅收集测试并列出它们,不执行测试。
1 |
|
显示执行最慢的 5 个测试。
1 |
|
显示所有测试的执行时间,按慢速排序。
失败重试
失败时自动重试
1 |
|
失败的测试最多重试 3 次。
1 |
|
@pytest.mark.flaky 可用于单独标记某些不稳定的测试进行重试。
配置 pytest
使用 pytest.ini 配置默认参数
1 |
|
addopts 指定默认运行参数。
python_files 定义测试文件格式。
python_classes 定义测试类的命名规则。
python_functions 定义测试函数的命名规则。
高级功能
并行运行测试
1 |
|
-n 4 表示同时运行 4 个测试进程,提高测试执行速度。
总结
pytest 常用命令参数总结
参数 | 作用 |
---|---|
pytest |
运行所有测试 |
pytest test_sample.py |
运行指定文件 |
pytest test_sample.py::test_func |
运行指定测试函数 |
pytest -k "关键字" |
只运行包含关键字的测试 |
pytest -m 标记 |
运行特定 @pytest.mark.<标记> 测试 |
pytest -x |
第一个失败的测试后停止 |
pytest --lf |
仅运行上次失败的测试 |
pytest --ff |
先运行失败的测试 |
pytest -v |
显示详细信息 |
pytest -s |
显示 print 输出 |
pytest --tb=short |
简化错误回溯 |
pytest --durations=5 |
显示最慢的 5 个测试 |
pytest --reruns 3 |
失败重试 3 次 |
pytest --junitxml=report.xml |
生成 JUnit 格式报告 |
pytest --alluredir=./allure-results |
生成 Allure 报告 |
pytest -n 4 |
并行运行 4 个测试 |
pytest skip
、skipif
、xfail
参数对比总结
标记 | 作用 | 适用场景 | 示例 |
---|---|---|---|
@pytest.mark.skip |
无条件跳过 | 功能未实现、不适用的测试 | @pytest.mark.skip(reason="功能未实现") |
@pytest.mark.skipif(condition, reason="…") |
条件跳过 | 根据环境、依赖决定是否跳过 | @pytest.mark.skipif(sys.platform == "win32", reason="Windows 下跳过") |
@pytest.mark.xfail |
预期失败(但仍运行) | 记录已知 Bug,不影响测试通过率 | @pytest.mark.xfail(reason="Bug 未修复") |
@pytest.mark.xfail(strict=True) |
预期失败(XPASS 视为失败) | 确保 Bug 未被误修复 | @pytest.mark.xfail(reason="Bug 未修复", strict=True) |