假设我在我的pytest.ini
文件中禁用了pytest插件,如:
[pytest]
...
addopts=
-p no:myplugin
现在我希望能够使用命令行参数启用它,例如:
pytest -p yes:myplugin
这可能吗?如果你有更好的建议,我也想知道。
答案 0 :(得分:3)
要再次加载插件,使用-p pytest_myplugin
。这可以在-p no:myplugin
之后链接(在命令行上或从pytest.ini的addopts中链接)。
这里发生了什么:当您指定-p no:plugin
,pytest prepends "pytest_" to "plugin"时。这是因为myplugin
实际上是从pytest_myplugin
导入的。不幸的是,这种便利性没有在加载方面进行镜像,这需要插件的完整模块名称。
答案 1 :(得分:-3)
我还没有必要这样做,因为通过命令行标志禁用插件更容易。作为一种解决方法,您可以使用-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 <(grep -v no:django pytest.ini)
使用unix namedpipe并使用grep
或sed
删除插件行。但是默认情况下使用所有插件并通过命令行禁用它似乎更容易。
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
或者我不会在addopts= -p no:myplugin
中指定pytest.ini
,而是在我想关闭它时使用PYTEST_ADDOPTS
环境变量。但这与您要求的内容略有相反