【Pytest】Pytest常用的第三方插件

目录

  • [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 插件,配置更直观、报告更美观。

效果预览:


写在最后

本文已被专栏 测试开发知识库 收录,欢迎 点击订阅专栏

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

相关推荐
玄同7651 天前
从 0 到 1:用 Python 开发 MCP 工具,让 AI 智能体拥有 “超能力”
开发语言·人工智能·python·agent·ai编程·mcp·trae
小瑞瑞acd1 天前
【小瑞瑞精讲】卷积神经网络(CNN):从入门到精通,计算机如何“看”懂世界?
人工智能·python·深度学习·神经网络·机器学习
火车叼位1 天前
也许你不需要创建.venv, 此规范使python脚本自备依赖
python
火车叼位1 天前
脚本伪装:让 Python 与 Node.js 像原生 Shell 命令一样运行
运维·javascript·python
孤狼warrior1 天前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
Katecat996631 天前
YOLO11分割算法实现甲状腺超声病灶自动检测与定位_DWR方法应用
python
玩大数据的龙威1 天前
农经权二轮延包—各种地块示意图
python·arcgis
ZH15455891311 天前
Flutter for OpenHarmony Python学习助手实战:数据库操作与管理的实现
python·学习·flutter
belldeep1 天前
python:用 Flask 3 , mistune 2 和 mermaid.min.js 10.9 来实现 Markdown 中 mermaid 图表的渲染
javascript·python·flask
喵手1 天前
Python爬虫实战:电商价格监控系统 - 从定时任务到历史趋势分析的完整实战(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·电商价格监控系统·从定时任务到历史趋势分析·采集结果sqlite存储