Pytest: как явно включить плагин в командной строке
Скажем, я отключил плагин pytest в моем файле pytest.ini
, например:
[pytest]
...
addopts=
-p no:myplugin
Теперь я хотел бы иметь возможность включать его иногда с аргументами командной строки, например:
pytest -p yes:myplugin
Это возможно? Пожалуйста, если у вас есть лучшие рекомендации, я тоже хотел бы это знать.
Ответы
Ответ 1
Чтобы снова загрузить плагин, используйте -p pytest_myplugin
. Это будет работать при цепочке после -p no:myplugin
(либо в командной строке, либо из pytest.ini addopts).
Что происходит здесь: когда вы указываете -p no:plugin
, pytest добавляет "pytest_" к "плагину" . Это связано с тем, что myplugin
фактически импортируется из pytest_myplugin
. К сожалению, это удобство не отражается на стороне загрузки, что требует полного имени модуля плагина.
Ответ 2
Мне это никогда не нужно было делать, так как легче отключить плагины с помощью флагов командной строки. В качестве обходного пути вы можете указать другой ini файл с помощью параметра -c
и либо иметь другой файл 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
, когда я хотел их переключать выкл. Но это немного отличается от того, что вы просили