目录
- [1 Pytest插件生态简介](#1 Pytest插件生态简介)
- [2 常用的第三方插件](#2 常用的第三方插件)
-
- [2.1 pytest-html](#2.1 pytest-html)
- [2.2 pytest-xdist](#2.2 pytest-xdist)
- pytest-rerunfailures
- [2.4 pytest-result-log](#2.4 pytest-result-log)
- 写在最后
1 Pytest插件生态简介
在Python的测试框架中,pytest 是一个非常流行和强大的选择,它提供了许多扩展插件来增强其功能。pytest 插件生态系统非常丰富,涵盖了从简单的断言扩展到复杂的测试框架集成等多种功能。
插件主要分为如下两类:
- 内置插件,这类插件不需要单独按照
- 第三方插件,需要单独安装
对于插件的启动/禁用通过命令行即可实现
shell
pytest -p xxx # 启用插件xxx
pytest -p no:xxx # 禁用插件xxx

本文就一些常用的第三方插件做简要介绍,更多内容可阅读官方文档:https://docs.pytest.org/en/latest/how-to/plugins.html
2 常用的第三方插件
2.1 pytest-html
pytest-html 用于生成 HTML 格式的测试报告。这个插件可以帮助你更直观地查看测试结果,特别是对于大型测试套件来说,HTML 报告提供了更好的组织和可视化效果。
安装:
shell
pip install pytest-html
使用方法:
方式一:命令行
shell
pytest --html=report.html --self-contained-html
方式二:配置文件pytest.ini
shell
[pytest]
addopts = --html=report.html --self-contained-html
效果:
pytest运行后,测试结果记录在一个html文件中

2.2 pytest-xdist
pytest-xdist 允许在多个 CPU 上并行运行测试,从而显著提高测试的执行速度。这对于大型项目尤其有用,因为它们通常包含大量的测试用例。
1.安装与基本使用
shell
pip install pytest-xdist
命令行参数:
-n auto:自动检测CPU核心数并分配进程。
-n 4:指定4个进程执行。
2.核心功能
负载分配策略:
--dist=load:动态分配测试用例(默认)。
--dist=loadscope:按测试类分组,确保类内用例在同一进程执行。
--dist=loadfile:按文件分配,适合文件间独立场景。
适用场景:适合CPU密集型测试,需保证用例独立、无依赖。
3.执行流程
(1) 解析命令行参数,获取分发模式。
(2) 加载并分发测试用例到不同进程。
(3) 并行执行测试用例。
(4) 汇总结果并清理资源。
4.注意事项
用例设计:需满足独立运行、无特定执行顺序、结果互不影响。
资源占用:建议使用不超过1/2的CPU核心数,避免系统卡顿。
pytest-rerunfailures
pytest-rerunfailures是pytest的插件,用于自动重试失败的测试用例,提高测试稳定性。
1.核心功能
- 自动重试:失败时自动重试,直到通过或达到最大重试次数。
- 灵活配置:支持命令行参数(--reruns、--reruns-delay)和装饰器(@pytest.mark.flaky)。
2.使用方式
安装:
shell
pip install pytest-rerunfailures
命令行参数:
--reruns n:指定重试次数(如--reruns 3)。
--reruns-delay m:设置重试间隔(如--reruns-delay 5)。
装饰器:
@pytest.mark.flaky(reruns=5):为特定用例设置重试次数。
3.注意事项
兼容性:与pytest-xdist的--looponfail标志不兼容。
优先级:装饰器参数优先级高于命令行参数。
示例代码
python
import random
def test_rerun():
x = random.randint(0, 9)
assert x >= 5
从结果可以看到,执行用例重试第3次成功

2.4 pytest-result-log
1.核心功能
日志记录:自动记录所有测试用例的执行结果(包括未选中、跳过、fixture错误的用例)。
兼容性:通过钩子机制,确保所有用例结果都能被准确记录。
2.安装与配置
shell
pip install pytest-result-log
在 pytest.ini 中配置:
shell
log_cli = true
log_cli_level = INFO
log_cli_format = %(levelname)-8s %(asctime)s [%(name)s:%(lineno)s] : %(message)s
log_cli_date_format = %Y-%m-%d %H:%M:%S
log_file = ./log/pytest.log
log_file_level = INFO
log_file_format = %(levelname)-8s %(asctime)s [%(name)s:%(lineno)s] : %(message)s
log_file_date_format = %Y-%m-%d %H:%M:%S
3. 使用场景
- 测试结果归档:生成可持久化的测试日志文件,便于后续分析。
- 问题排查:记录所有用例执行状态,避免因未执行用例导致的遗漏。
4.注意事项
版本兼容性:pytest 6.1.0+ 版本移除了原生 result_log 支持,需使用 pytest-result-log 插件。
替代方案:若需生成HTML报告,推荐使用 pytest-html 插件。
5.常见问题
配置错误:若出现 Unknown config option: result_log 警告,需检查配置文件或升级 pytest 版本。
推荐:若需生成HTML报告,建议使用 pytest-html 插件,配置更直观、报告更美观。
效果预览:

写在最后
以上便是本文的全部内容啦!创作不易,如果你有任何问题,欢迎私信,感谢您的支持!
