目录
本节讨论安装和使用第三方插件。如果想自己编写插件,请参考“编写插件”部分 Writing plugins。
使用pip可以很容易地安装第三方插件:
pip install pytest-NAME
pip uninstall pytest-NAME
如果插件已安装,pytest 会自动发现并集成它,无需手动激活。
以下是一些流行插件的简要说明列表:
pytest-django:使用pytest集成来编写针对django 应用的测试。
pytest-twisted:编写针对twisted 应用的测试,启动一个reactor并从测试函数中处理deferreds。
pytest-cov:提供覆盖率报告,与分布式测试兼容。
pytest-xdist:将测试分发到CPU和远程主机上,以在盒装模式下运行(允许在发生段错误时继续运行),在循环失败模式下运行,在文件更改时自动重新运行失败的测试。
pytest-instafail:在测试运行时立即报告失败。
pytest-bdd:使用行为驱动测试(BDD)编写测试。
pytest-timeout:根据函数标记或全局定义来设置测试的超时时间。
pytest-pep8:提供一个--pep8选项,用于启用PEP8合规性检查。
pytest-flakes:使用pyflakes检查源代码。
allure-pytest:通过allure-framework报告测试结果。
要查看所有插件的完整列表以及它们针对不同pytest和Python版本的最新测试状态,请访问Pytest插件列表Pytest Plugin List。
您也可以通过在pypi.org上进行pytest相关搜索来发现更多插件pytest- pypi.org search。
在测试模块或conftest
文件中要求/加载插件
在测试模块或conftest
文件中,你可以使用pytest_plugins
变量来指定需要加载的插件。
pytest_plugins = ("myapp.testsupport.myplugin",)
这行代码告诉pytest去加载位于myapp.testsupport
模块中的myplugin
插件。注意,这里使用了一个元组(尽管只有一个元素,但元组是必需的),因为pytest_plugins
可以指定多个插件。
将插件的导入路径赋值给pytest_plugins
,当测试模块或conftest插件被加载时,指定的插件也会被加载。pytest会在测试运行之前自动加载这些插件。
注意
在非根目录的conftest.py
文件中使用pytest_plugins
变量来要求插件已被弃用。请参阅“编写插件”部分中的完整解释。
注意
pytest_plugins
这个名称是保留的,不应用作自定义插件模块的名称。
找出哪些插件是激活的
如果你想找出在你的环境中哪些插件是激活的,你可以输入:
pytest --trace-config
这个命令将生成一个扩展的测试头部,显示已激活的插件及其名称。当加载本地插件(也称为conftest.py 文件)时,它也会打印出来。这个选项非常有用,因为它可以帮助你了解哪些插件正在影响你的测试运行,以及它们是如何被加载的。
通过名称停用/注销插件
你可以阻止插件的加载或注销它们:
pytest -p no:NAME
这里的NAME
是你想要停用或注销的插件的名称。这个命令的意思是,任何后续尝试激活/加载该名称的插件都不会成功。这是一种在特定情况下排除不需要的插件的便捷方式。注意,这只会影响当前pytest会话,不会影响全局的pytest配置。
如果你想要无条件地为项目禁用一个插件,你可以在你的pytest.ini
文件中添加这个选项:
[pytest]
addopts = -p no:NAME
这里的NAME
是你想要禁用的插件的名称。这样,每次运行pytest时,这个插件都不会被加载。
另外,如果你只想在特定环境中禁用插件(例如在持续集成(CI)服务器上),你可以设置PYTEST_ADDOPTS
环境变量为-p no:NAME
。这样,当该环境变量被设置时,pytest会在运行时自动添加这个选项,从而禁用指定的插件。
关于如何获取插件的名称,请参见“找出哪些插件是激活的”部分,其中介绍了如何使用pytest --trace-config
命令来列出所有激活的插件及其名称。