Pytest 插件怎么写:从0开发一个你自己的插件
概述
你用过 pytest-html
生成报告,或用 pytest-xdist
并行运行测试吗?这些强大的功能,其实都是 Pytest 插件
这些都是我们引入项目后直接使用的,当然 你也可以自己写一个 Pytest 插件
基本原理
Pytest 的强大,源于它的 插件系统。它允许你通过定义特定的函数(称为 Hook),来“插入”到 Pytest 的执行流程中,从而改变或增强它的行为
Hook 函数
Pytest 定义了一系列 钩子函数(Hook),比如:
pytest_runtest_setup(item)
:每个测试开始前调用pytest_runtest_teardown(item)
:每个测试结束后调用pytest_addoption(parser)
:添加命令行参数pytest_configure(config)
:配置初始化时调用
你只需要在插件中实现这些函数,Pytest 就会自动调用它们
插件的两种形式
- 独立的 Python 包(发布到 PyPI)
- 项目内的
conftest.py
文件(本地使用)
我们先从最简单的开始:在 conftest.py
中写插件
写一个“测试耗时统计”插件
我们来写一个插件,自动统计每个测试用例的执行时间,并输出耗时过长的用例
第一步:创建项目结构
my_project/
├── tests/
│ ├── conftest.py ← 插件写在这里
│ └── test_example.py ← 测试用例
第二步:编写插件代码(conftest.py
)
# conftest.py
import time
import pytest# 存储测试耗时
test_durations = {}def pytest_addoption(parser):"""添加命令行参数"""parser.addoption("--slow-threshold", type=float, default=1.0,help="慢测试的阈值(秒),默认1秒")def pytest_configure(config):"""配置初始化"""config.addinivalue_line