Pytest 插件管理:安装、加载与禁用
安装第三方插件
Pytest 的强大功能很大程度上得益于其丰富的插件生态系统。通过 pip 可以轻松安装和卸载插件:
pip install pytest-NAME
pip uninstall pytest-NAME
一旦安装成功,Pytest 会自动发现并集成该插件,无需额外配置即可使用。
常用插件示例
- pytest-django:为 Django 项目提供测试支持。
- pytest-xdist:实现多进程并发执行测试,提升运行效率。
- pytest-cov:生成代码覆盖率报告,兼容分布式测试环境。
- pytest-bdd:支持行为驱动开发(BDD),使用 Gherkin 风格编写测试。
- pytest-timeout:为测试函数设置超时限制。
- pytest-flakes 和 pytest-pep8:分别用于静态代码检查和 PEP8 规范验证。
- pytest-twisted:适配 Twisted 异步框架的测试需求。
- oejskit:在真实浏览器中运行 JavaScript 单元测试。
完整的插件列表及其兼容性信息可在 PluginCompat 网站查看。也可以访问 pytest.org 获取更多插件资源。
在模块或 conftest 中加载插件
可以通过在测试文件或 conftest.py 中声明 pytest_plugins 变量来显式引入插件:
pytest_plugins = ["myapp.helper.plugin", "pytester"]
当 Pytest 加载该模块时,指定的插件将被自动注册。注意此变量仅应在项目根目录下的 conftest.py 中使用,避免在子目录的 conftest.py 中定义,以免造成作用域混乱。
提示:
pytest_plugins是保留名称,请勿将其用作自定义插件模块的文件名。
查看当前可用插件
要列出所有已被识别和激活的插件,可在命令行运行:
pytest --trace-config
执行后,终端将输出详细的插件加载日志,包括内置插件、第三方插件以及项目中各个 conftest.py 文件的加载顺序。
按名称禁用插件
若需临时阻止某个插件加载,可使用 -p no:名称 参数:
pytest -p no:doctest
上述命令将禁用 doctest 插件,任何后续尝试激活它的操作都将无效。
如需在项目级别永久禁用某插件,可在 pytest.ini 配置文件中添加:
[pytest]
addopts = -p no:tracing
对于特定环境(如 CI/CD 流水线),可通过设置环境变量实现条件禁用:
export PYTEST_ADDOPTS="-p no:debugging"
这样在不影响本地开发的前提下,灵活控制不同环境中插件的行为。