Python pytest:如何在命令行中显式启用插件

Python pytest:如何在命令行中显式启用插件,python,testing,pytest,Python,Testing,Pytest,假设我在我的pytest.ini文件中禁用了一个pytest插件,如下所示: [pytest] ... addopts= -p no:myplugin 现在,我希望能够有时使用命令行参数启用它,例如: pytest -p yes:myplugin 可能吗?如果您有更好的建议,我也想知道。我从来没有这样做过,因为通过命令行标志禁用插件更容易。作为一种解决方法,您可以使用-c选项指定不同的ini文件,也可以使用不同的ini文件,甚至可以使用下面的/dev/null $ cat pytes

假设我在我的
pytest.ini
文件中禁用了一个pytest插件,如下所示:

[pytest]
...
addopts=
    -p no:myplugin
现在,我希望能够有时使用命令行参数启用它,例如:

pytest -p yes:myplugin

可能吗?如果您有更好的建议,我也想知道。

我从来没有这样做过,因为通过命令行标志禁用插件更容易。作为一种解决方法,您可以使用
-c
选项指定不同的ini文件,也可以使用不同的ini文件,甚至可以使用下面的
/dev/null

$ cat pytest.ini
[pytest]
addopts= -p no:django
$ py.test 
================================================= test session starts 
platform linux -- Python 3.4.3, pytest-3.0.5, py-1.4.32, pluggy-0.4.0
rootdir: /home/me/python, inifile: pytest.ini
plugins: pep8-1.0.6, cov-2.4.0
collected 0 items 
============================================ no tests ran in 0.02 seconds    
$ py.test -c /dev/null
================================================= test session starts
platform linux -- Python 3.4.3, pytest-3.0.5, py-1.4.32, pluggy-0.4.0
rootdir: /home/me/python, inifile: /dev/null
plugins: django-3.1.2, pep8-1.0.6, cov-2.4.0
collected 0 items 
============================================ no tests ran in 0.02 seconds

如果你真的需要它,你可以这样做
py.test-c要再次加载插件,请使用
-p pytest\u myplugin
。当链接到
-p no:myplugin
之后(在命令行上或从pytest.ini的addopts中)时,这将起作用


这里发生了什么:当您指定
-p no:plugin
。这是因为
myplugin
实际上是从
pytest\u myplugin
导入的。不幸的是,这种便利性并没有反映在加载端,这需要插件的完整模块名。

谢谢,是的,这有助于避免使用
pytest.ini
文件,但问题是可能已经有一些插件被禁用了,如果您真的需要它,最好只启用一个插件,你可以这样做<代码>py.test-c是的,但问题是要让其他运行测试的人更简单。我可以避免使用该文件,并在命令行上分别禁用每个文件,但这不是在项目中运行测试的默认方式。听起来您的用例可能非常复杂,您需要在
py.test
命令周围使用包装器。看看如何生成一个
runtest.py
,您可以自定义它来添加您自己的命令或使用它,这是我用来包装许多命令而不仅仅是测试的。所以你可以对你的用户隐藏所有的命令行选项,他们只需运行一个简单的命令。是的,我正在考虑这样做。整个想法是保持所有配置,以便只使用
pytest
命令运行测试,然后在需要时一次启用一个插件。现在,我在我的项目中修复了这个问题,通过分叉我自己版本的插件并添加一个启用参数。至少在pytest 3.5.1中,这不起作用。当它解析
-p no:foo
时,插件被放置在阻止列表中,并且任何后续
-p foo
都不能再重新启用它。看,哇,是的,至少从2.9开始这就不应该起作用了。我在3.0.0版上复制了不可复制性。看起来没有任何内置方法可以从命令行重新启用被阻止的插件。
py.test -c <(grep -v no:django pytest.ini)
================================================= test session starts 
platform linux -- Python 3.4.3, pytest-3.0.5, py-1.4.32, pluggy-0.4.0
rootdir: /home/me/python, inifile: /dev/fd/63
plugins: django-3.1.2, pep8-1.0.6, cov-2.4.0
collected 0 items 
============================================ no tests ran in 0.03 seconds