pytest常用的模块有哪些,请分别介绍一下

下面按“pytest 常用的模块/插件(以及常见内置功能)”来给你梳理,并分别说明用途(有些是 pytest 自带模块/能力,有些是生态里最常见的第三方插件)。


1)pytest(核心框架)

用途:提供测试运行器、收集/执行测试、断言体系、夹具(fixture)机制、hook 扩展等。
你会用到的典型能力

  • 测试发现:test_*.py / *_test.py / 类名以 Test 开头等
  • 运行:pytest -vpytest -qpytest -kpytest 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 插件组合 + 推荐配置”。