Подтвердить что ты не робот

Pytest: как явно включить плагин в командной строке

Скажем, я отключил плагин pytest в моем файле pytest.ini, например:

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

Теперь я хотел бы иметь возможность включать его иногда с аргументами командной строки, например:

pytest -p yes:myplugin

Это возможно? Пожалуйста, если у вас есть лучшие рекомендации, я тоже хотел бы это знать.

4b9b3361

Ответ 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, когда я хотел их переключать выкл. Но это немного отличается от того, что вы просили