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

时间:2017-02-17 20:03:26

标签: python testing pytest

假设我在我的pytest.ini文件中禁用了pytest插件,如:

[pytest]
...
addopts=
    -p no:myplugin

现在我希望能够使用命令行参数启用它,例如:

pytest -p yes:myplugin

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

2 个答案:

答案 0 :(得分:3)

要再次加载插件,使用-p pytest_myplugin 。这可以在-p no:myplugin之后链接(在命令行上或从pytest.ini的addopts中链接)。

这里发生了什么:当您指定-p no:pluginpytest 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并使用grepsed删除插件行。但是默认情况下使用所有插件并通过命令行禁用它似乎更容易。

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环境变量。但这与您要求的内容略有相反