Reputation: 1491
I have tests within the same repository (separate pytest.ini files) that require different pytest plugins. How can I disable multiple plugins in pytest.ini without uninstalling them?
https://docs.pytest.org/en/latest/plugins.html#findpluginname
addopts = --nomigrations --reuse-db -s -p no:pytest-splinter
works fine, but I also want to disable pytest-django and pytest-bdd for one of the test suites. How can I do that? I've tried:
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
all fail, and the documentation doesn't describe how this is done. Any pointers greatly appreciated, thanks!
Upvotes: 10
Views: 3098
Reputation: 66251
The usage with the repeated passing of the -p
option is the correct one. However, you are using the wrong plugin names. Instead of passing the PyPI package names, use the pytest
plugin names:
addopts = --nomigrations --reuse-db -s -p no:pytest-splinter -p no:django
When in doubt whether using correct plugin name, use pytest --trace-config
to list all installed plugins along with their names:
$ 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
failsIn that case, you could query the metadata of the installed packages directly, for example using pkg_resources
(part of setuptools
package, which is preinstalled on most of the Python distributions nowadays; if not, install as usual: 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))
Example output:
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
Another possibility to find out the plugin name is to look in the plugin's source code. The name is in the plugin's entry point declaration:
entry_points={'pytest11': [
'plugin_name=plugin.registration.module',
]}
Thus,
pytest-splinter
is pytest-splinter
(duh!),pytest-django
is django
.Upvotes: 10