New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

-p no:pluginname on pytest 2.9.x ignored on xdist slave node #1618

Open
fizyk opened this Issue Jun 18, 2016 · 11 comments

Comments

@fizyk

fizyk commented Jun 18, 2016

For pytest-dbfxitures plugin we run tests both with pytest-xdist and without to make sure we cover all the possibilities on travis. However, when running on xdist on pytest 2.9.x I get
argparse.ArgumentError: argument --dbfixtures-config: conflicting option string: --dbfixtures-config

to get the full coverage we run tests without the plugin (-p no:bfixtures) and import all pytest's plugins triggers in main conftest. It worked perfectly till the 2.9.x version, where it seems under xdist, the plugin is being loaded even thouth the options states it not to load.

alabaster (0.7.7)
apipkg (1.4)
Babel (2.2.0)
backports.shutil-get-terminal-size (1.0.0)
bumpversion (0.5.3)
coverage (4.1)
coveralls (1.1)
decorator (4.0.10)
docopt (0.6.2)
docutils (0.12)
execnet (1.4.1)
fancycompleter (0.4)
ipython (4.2.0)
ipython-genutils (0.1.0)
Jinja2 (2.8)
MarkupSafe (0.23)
mccabe (0.5.0)
mirakuru (0.7.0)
mock (2.0.0)
mysqlclient (1.3.7)
ordereddict (1.1)
pamqp (1.6.1)
path.py (8.2.1)
pbr (1.8.1)
pdbpp (0.8.3)
pep257 (0.7.0)
pep8 (1.7.0)
pexpect (4.1.0)
pickleshare (0.7.2)
pip (7.1.2)
port-for (0.3.1)
psycopg2 (2.6.1)
ptyprocess (0.5.1)
py (1.4.31)
pyaml (15.8.2)
pyflakes (1.2.3)
Pygments (2.1)
pylama (7.0.9)
pymlconf (0.4.0)
pymongo (3.2.2)
pytest (2.9.2)
pytest-cov (2.2.1)
pytest-dbfixtures (0.13.1)
pytest-xdist (1.14)
pytz (2015.7)
PyYAML (3.11)
rabbitpy (0.27.1)
redis (2.10.5)
requests (2.9.1)
setuptools (23.0.0)
simplegeneric (0.8.1)
six (1.10.0)
snowballstemmer (1.2.1)
Sphinx (1.3.5)
sphinx-rtd-theme (0.1.9)
traitlets (4.2.1)
wheel (0.24.0)
wmctrl (0.3)

py.test 2.9.2 and os is anything travis runs its tests on, and ubuntu 16.4
example https://github.com/ClearcodeHQ/pytest-dbfixtures and pull request I;m trying to upgreade the py.test on without sacrificing coverage.

@nicoddemus

This comment has been minimized.

Member

nicoddemus commented Jun 18, 2016

Thanks for the report!

I would guess the problem is that the option is not being interpreted correctly by the workers, but this needs more investigation.

@RonnyPfannschmidt

This comment has been minimized.

Member

RonnyPfannschmidt commented Jun 21, 2016

we finished the investigation, your conftest imports the plugin addoption function

so pytest sees an addoption hook in 2 different plugins, thus runs it twice and ends with an conflict

@RonnyPfannschmidt RonnyPfannschmidt changed the title from Tests for pytest plugin fails in xdist when trying to run with -p no:plugin on pytest 2.9.x to confusing/unhelpful errors when 2 plugin objects contain the same pytest_addoption hook Jun 21, 2016

@RonnyPfannschmidt

This comment has been minimized.

Member

RonnyPfannschmidt commented Jun 21, 2016

after re-reading the message, there is probably more to it :)

@RonnyPfannschmidt RonnyPfannschmidt changed the title from confusing/unhelpful errors when 2 plugin objects contain the same pytest_addoption hook to -p no:pluginname on pytest 2.9.x ignored on xdist slave node Jun 21, 2016

@RonnyPfannschmidt

This comment has been minimized.

Member

RonnyPfannschmidt commented Jun 21, 2016

a quick run down of the conditions

  • have a installed python plugin
  • disable it with -p no:my_entry_point
  • reenable it via the conftest, that happens after pytest-cov
  • watch xdist ignore the -p no:my_entry_point
@RonnyPfannschmidt

This comment has been minimized.

Member

RonnyPfannschmidt commented Jun 22, 2016

after finishing investigation the issue is enforced by plugin blockers in xdist only being interpreted after initial loading of setuptools plugins,

thus the plugin in dbfixtures gets loaded, then unloaded, but the effects of the addoption stay
the solution will be to fix the behavior of the utility method that is invoked on the remote

@RonnyPfannschmidt

This comment has been minimized.

Member

RonnyPfannschmidt commented Jun 25, 2016

0e55a87 was part of it

@RonnyPfannschmidt

This comment has been minimized.

Member

RonnyPfannschmidt commented Jun 25, 2016

9c54958 introduced it

RonnyPfannschmidt added a commit to RonnyPfannschmidt/pytest that referenced this issue Jun 25, 2016

fix issue pytest-dev#1618 by considering plugin args first
additionally prevent unnecessary importation of blocked plugins

RonnyPfannschmidt added a commit to RonnyPfannschmidt/pytest that referenced this issue Jun 25, 2016

fix issue pytest-dev#1618 by considering plugin args first
additionally prevent unnecessary importation of blocked plugins

RonnyPfannschmidt added a commit to RonnyPfannschmidt/pytest that referenced this issue Jun 25, 2016

@nicoddemus

This comment has been minimized.

Member

nicoddemus commented Jun 26, 2016

@RonnyPfannschmidt how's the status on this issue?

@nicoddemus

This comment has been minimized.

Member

nicoddemus commented Jun 26, 2016

Oh #1673 attempts to solve this.

dybi added a commit to golemfactory/concent that referenced this issue Sep 7, 2018

Disable passing extra arguments option for pytest invocation for midd…
…leman_protocol and signing_service

Due to a BUG in pytest: (pytest-dev/pytest#1618) `-p no:django` doesn't work for parallel runs, causing pytest to expect Django setup in non-Django apps and thus failing.

dybi added a commit to golemfactory/concent that referenced this issue Sep 10, 2018

Disable passing extra arguments option for pytest invocation for midd…
…leman_protocol and signing_service

Due to a BUG in pytest: (pytest-dev/pytest#1618) `-p no:django` doesn't work for parallel runs, causing pytest to expect Django setup in non-Django apps and thus failing.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment