前言
在运行用例的时候,我们可能出于某种需求,不想加载某个插件,比如我通过pip安装了一个pytest的插件。 后续我想修改插件的一些代码,于是放到项目本地,自己去注册本地插件了。这样就需要禁用 pip 安装的那个插件。
查看激活的插件
我们可以通过 --trace-config
命令插件当前运行环境中的相关插件与已激活的插件
pytest --trace-config
将获得一个扩展的测试头,其中显示激活的插件及其名称。它还将在加载本地插件(即conftest.py文件)时打印它们 运行结果展示
代码语言:javascript复制platform win32 -- Python 3.8.5, pytest-7.2.2, pluggy-1.0.0
using: pytest-7.2.2
setuptools registered plugins:
allure-pytest-2.13.1 at d:python3.8libsite-packagesallure_pytestplugin.py
pytest-base-url-2.0.0 at d:python3.8libsite-packagespytest_base_urlplugin.py
active plugins:
2056185851232 : <_pytest.config.PytestPluginManager object at 0x000001DEBE3A2D60>
pytestconfig : <_pytest.config.Config object at 0x000001DEBE3DBF10>
mark : d:python3.8libsite-packages_pytestmark__init__.py
main : d:python3.8libsite-packages_pytestmain.py
runner : d:python3.8libsite-packages_pytestrunner.py
fixtures : d:python3.8libsite-packages_pytestfixtures.py
helpconfig : d:python3.8libsite-packages_pytesthelpconfig.py
python : d:python3.8libsite-packages_pytestpython.py
terminal : d:python3.8libsite-packages_pytestterminal.py
debugging : d:python3.8libsite-packages_pytestdebugging.py
unittest : d:python3.8libsite-packages_pytestunittest.py
capture : d:python3.8libsite-packages_pytestcapture.py
skipping : d:python3.8libsite-packages_pytestskipping.py
legacypath : d:python3.8libsite-packages_pytestlegacypath.py
tmpdir : d:python3.8libsite-packages_pytesttmpdir.py
monkeypatch : d:python3.8libsite-packages_pytestmonkeypatch.py
recwarn : d:python3.8libsite-packages_pytestrecwarn.py
pastebin : d:python3.8libsite-packages_pytestpastebin.py
nose : d:python3.8libsite-packages_pytestnose.py
assertion : d:python3.8libsite-packages_pytestassertion__init__.py
junitxml : d:python3.8libsite-packages_pytestjunitxml.py
doctest : d:python3.8libsite-packages_pytestdoctest.py
cacheprovider : d:python3.8libsite-packages_pytestcacheprovider.py
freeze_support : d:python3.8libsite-packages_pytestfreeze_support.py
setuponly : d:python3.8libsite-packages_pytestsetuponly.py
setupplan : d:python3.8libsite-packages_pytestsetupplan.py
stepwise : d:python3.8libsite-packages_pyteststepwise.py
warnings : d:python3.8libsite-packages_pytestwarnings.py
logging : d:python3.8libsite-packages_pytestlogging.py
reports : d:python3.8libsite-packages_pytestreports.py
python_path : d:python3.8libsite-packages_pytestpython_path.py
unraisableexception : d:python3.8libsite-packages_pytestunraisableexception.py
threadexception : d:python3.8libsite-packages_pytestthreadexception.py
faulthandler : d:python3.8libsite-packages_pytestfaulthandler.py
allure_pytest : d:python3.8libsite-packagesallure_pytestplugin.py
base_url : d:python3.8libsite-packagespytest_base_urlplugin.py
禁用插件
使用 -p
来禁用插件, 在命令行执行时如下示例
pytest -p no:NAME
NAME 就是插件的名称,这意味着任何后续激活/加载命名插件的尝试都将无法工作。 或者在pytest.ini 中配置
代码语言:javascript复制[pytest]
addopts = -p no:NAME
查看插件名称
我通过 pip 安装了 pytest-base-url 插件
代码语言:javascript复制pytest-base-url
如果需要禁用此插件,先需要知道插件名称,注意插件名称不是你安装的名称
方法一:找到插件名称的另一种方法是查看插件的源代码。 名称在插件的入口点声明中:
代码语言:javascript复制entry_points={'pytest11': [
'plugin_name=plugin.registration.module',
]}
方法二:通过以下代码得出
代码语言:javascript复制import os
import pkg_resources
data = ['{}-{}: {}'.format(dist.project_name, dist.version,
' '.join(dist.get_entry_map(group='pytest11').keys()))
for dist in pkg_resources.working_set if dist.get_entry_map(group='pytest11')]
print(os.linesep.join(data))
输出结果
代码语言:javascript复制pytest-base-url-2.0.0: base_url
allure-pytest-2.13.1: allure_pytest
方法三:在安装的包里面查看
Lib/site-packages里面查看entry_points.txt文件
于是在pytest.ini 中这一配置
代码语言:javascript复制[pytest]
addopts = -p no:base_url
禁用多个插件示例
代码语言:javascript复制[pytest]
addopts = -p no:base_url
-p no:NAME2