Как отключить несколько плагинов в pytest.ini? - PullRequest
0 голосов
/ 28 августа 2018

У меня есть тесты в одном и том же хранилище (отдельные файлы pytest.ini), для которых требуются разные плагины pytest. Как я могу отключить несколько плагинов в pytest.ini, не удаляя их?

https://docs.pytest.org/en/latest/plugins.html#findpluginname

addopts = --nomigrations --reuse-db -s -p no:pytest-splinter 

работает нормально, но я также хочу отключить pytest-django и pytest-bdd для одного из наборов тестов. Как я могу это сделать? Я пробовал:

addopts = --nomigrations --reuse-db -s -p no:pytest-splinter -p no:pytest-django 

addopts = --nomigrations --reuse-db -s -p no:pytest-splinter no:pytest-django 

addopts = --nomigrations --reuse-db -s -p no:pytest-splinter pytest-django 

все терпит неудачу, и документация не описывает, как это делается. Любые указатели очень ценятся, спасибо!

1 Ответ

0 голосов
/ 28 августа 2018

Использование с повторным прохождением опции -p является правильным. Однако вы используете неправильные названия плагинов. Вместо передачи имен пакетов PyPI используйте имена плагинов pytest:

addopts = --nomigrations --reuse-db -s -p no:pytest-splinter -p no:django

Если сомневаетесь, используете ли правильное имя плагина, используйте pytest --trace-config, чтобы вывести список всех установленных плагинов вместе с их именами:

$ pytest --trace-config
...
PLUGIN registered: <module 'pytest_html.plugin' from '/Users/hoefling/.virtualenvs/stackoverflow/lib/python3.6/site-packages/pytest_html/plugin.py'>
PLUGIN registered: <module 'pytest_django.plugin' from '/Users/hoefling/.virtualenvs/stackoverflow/lib/python3.6/site-packages/pytest_django/plugin.py'>
...
=============================================== test session starts ===============================================
platform darwin -- Python 3.6.4, pytest-3.7.3.dev26+g7f6c2888, py-1.5.4, pluggy-0.7.1
using: pytest-3.7.3.dev26+g7f6c2888 pylib-1.5.4
setuptools registered plugins:
  pytest-metadata-1.7.0 at /Users/hoefling/.virtualenvs/stackoverflow/lib/python3.6/site-packages/pytest_metadata/plugin.py
  pytest-html-1.19.0 at /Users/hoefling/.virtualenvs/stackoverflow/lib/python3.6/site-packages/pytest_html/plugin.py
  pytest-django-3.4.2 at /Users/hoefling/.virtualenvs/stackoverflow/lib/python3.6/site-packages/pytest_django/plugin.py
active plugins:
    metadata : /Users/hoefling/.virtualenvs/stackoverflow/lib/python3.6/site-packages/pytest_metadata/plugin.py
    html     : /Users/hoefling/.virtualenvs/stackoverflow/lib/python3.6/site-packages/pytest_html/plugin.py
    django   : /Users/hoefling/.virtualenvs/stackoverflow/lib/python3.6/site-packages/pytest_django/plugin.py
...

Когда pytest --trace-config не удается

В этом случае вы можете запросить метаданные установленных пакетов напрямую, например, используя pkg_resources (часть пакета setuptools, который в настоящее время предустановлен в большинстве дистрибутивов Python; если нет, установите как обычно: pip install --user setuptools):

import os
import pkg_resources

data = ['{}-{}: {}'.format(dist.project_name, dist.version,
                           ' '.join(dist.get_entry_map(group='pytest11').keys()))
        for dist in pkg_resources.working_set if dist.get_entry_map(group='pytest11')]

print(os.linesep.join(data))

Пример вывода:

requests-mock-1.5.2: requests_mock
pytest-splinter-1.9.1: pytest-splinter
pytest-metadata-1.7.0: metadata
pytest-html-1.19.0: html
pytest-django-3.4.2: django

Еще одна возможность узнать имя плагина - посмотреть в исходном коде плагина. Имя указано в объявлении точки входа плагина:

entry_points={'pytest11': [
    'plugin_name=plugin.registration.module',
]}

Таким образом,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...