下面按“pytest 常用的模块/插件(以及常见内置功能)”来给你梳理,并分别说明用途(有些是 pytest 自带模块/能力,有些是生态里最常见的第三方插件)。
1)pytest(核心框架)
用途:提供测试运行器、收集/执行测试、断言体系、夹具(fixture)机制、hook 扩展等。
你会用到的典型能力:
- 测试发现:
test_*.py/*_test.py/ 类名以Test开头等 - 运行:
pytest -v、pytest -q、pytest -k、pytest path/ - 断言重写:增强失败信息(比普通 assert 更友好)
2)pytest.fixture(夹具机制)
这不是“模块”,但属于 pytest 最常用的“内置功能”。
用途:把“准备数据/环境/依赖”的逻辑抽出来复用,提升可维护性。
常见用法:
-
@pytest.fixture定义夹具 - 测试函数参数注入夹具:
def test_x(client): ... - 作用域:
function/session/module/class等(可通过参数控制)
3)pytest.mark(标记与选择执行)
用途:给用例打标签,用于筛选与分组执行。
常见标记:
-
@pytest.mark.parametrize:参数化多组数据 -
@pytest.mark.skip / xfail:跳过或预期失败 - 自定义标记:比如
@pytest.mark.smoke、@pytest.mark.regression然后用-m选择
4)pytest.raises(异常断言)
用途:验证代码是否抛出指定异常。
示例直观作用:
- 断言某操作在错误输入下会抛异常
- 可进一步校验异常信息:
match=...
5)pytest.approx(浮点数近似断言)
用途:处理浮点误差,进行“近似相等”判断。
典型场景:
- 金融/计算类逻辑
- 传感器数据、数值算法的测试
6)pytest-cov(覆盖率统计)
用途:生成代码覆盖率报告(终端/HTML/XML 等)。
你会用到的命令:
-
pytest --cov=your_pkg --cov-report=html
价值: - 快速看到哪些分支/文件没测到
- CI 中常用
7)pytest-xdist(并行测试)
用途:把测试分发到多进程并行执行,提升速度。
常见用法:
-
pytest -n auto或-n 4
注意点: - 测试之间要尽量“无共享状态”或正确隔离(否则会并发污染)
8)pytest-mock(mock 相关增强)
用途:对 unittest.mock 的使用做更便捷封装,提供 mocker fixture。
常见场景:
- mock 外部接口/数据库/文件系统
- mock 函数调用次数、参数
9)responses(HTTP 接口 mock,常与 requests 生态配合)
用途:模拟 HTTP 返回,不真正发网络请求。
适用:
- 你的代码用
requests调第三方 API - 需要稳定可控的接口返回
10)requests-mock(另一种请求 mock 生态)
用途:同样用于 mock HTTP 请求,但风格/用法与 responses 不同。
你可以选择:
- 项目已有生态偏好哪个就用哪个
- 都能实现“拦截请求并返回预设数据”
11)pytest-html(生成 HTML 测试报告)
用途:输出更直观的 HTML 报告(适合展示给非工程同学/CI归档)。
常见效果:
- 用例执行结果、耗时、失败截图(若结合其他工具)
12)pytest-rerunfailures(失败重跑)
用途:当用例失败时自动重跑,减少“偶发性失败”(flaky tests)影响。
适用场景:
- 网络抖动、异步时序问题导致的偶发失败
注意: - 重跑不能替代修复根因,建议配合排查
13)pytest-timeout(超时控制)
用途:给测试设置最长运行时间,防止卡死/死循环。
常见用法:
- 对慢接口、等待外部资源的测试尤其有用
14)pytest-bdd / behave(BDD 相关)
用途:偏“行为驱动开发”的写法,用特征描述(Feature/Scenario)映射到测试代码。
说明:
- 不是每个项目都需要
- 适合“需求更偏文本描述”的团队
小结(你可以这样记)
-
pytest 自身能力:
fixture / mark / parametrize / raises / approx -
常用插件:
-
pytest-cov(覆盖率) -
pytest-xdist(并行) -
pytest-mock(mock 支持) -
pytest-html(HTML 报告) -
pytest-timeout(超时) -
pytest-rerunfailures(失败重跑) - 以及 HTTP mock:
responses / requests-mock
-
如果你告诉我:你现在项目用的是 requests 还是 httpx、是否需要 并发/覆盖率/CI 报告,我可以再帮你给出一份“最适合你项目的 pytest 插件组合 + 推荐配置”。