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

Created on 19 Jun 2016  路  12Comments  路  Source: pytest-dev/pytest

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.

critical reporting backward compatibility bug enhancement feature-branch refactoring

Most helpful comment

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

All 12 comments

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.

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

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

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

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

0e55a8793f182518aef3401b4893fe4caeea962a was part of it

9c5495832cc89c6dd9b89719eb149ee379d6992b introduced it

@RonnyPfannschmidt how's the status on this issue?

Oh #1673 attempts to solve this.

@RonnyPfannschmidt I did notice much more detailed output with pytest 3.0.0 (https://travis-ci.org/ClearcodeHQ/pytest-elasticsearch/jobs/153690767) , but I wonder what should be the next steps in order to have it (help to get it) fixed?

The cause is that remote config initialization loads all plugins then scraps some

Its a hard to fix one

I believe this has already been fixed with the config changes in pytest-xdist; if not we can reopen this later.

Was this page helpful?
0 / 5 - 0 ratings