概述
你用過 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