From 7a0bc4c1c9a2d8da2f04ad02fc83b2417493863c Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Wed, 30 Nov 2022 13:57:04 -0300 Subject: [PATCH] Let users configure dist mode in the configuration file Fix #789 --- changelog/789.feature.rst | 6 ++++++ src/xdist/plugin.py | 21 ++++++++++++++------- testing/acceptance_test.py | 18 ++++++++++++++++++ 3 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 changelog/789.feature.rst diff --git a/changelog/789.feature.rst b/changelog/789.feature.rst new file mode 100644 index 00000000..426583c0 --- /dev/null +++ b/changelog/789.feature.rst @@ -0,0 +1,6 @@ +Users can now set a default distribution mode in their configuration file: + +.. code-block:: ini + + [pytest] + addopts = --dist loadscope diff --git a/src/xdist/plugin.py b/src/xdist/plugin.py index a24864ec..8c22f9b8 100644 --- a/src/xdist/plugin.py +++ b/src/xdist/plugin.py @@ -190,7 +190,19 @@ def pytest_addhooks(pluginmanager): @pytest.hookimpl(trylast=True) def pytest_configure(config): - if config.getoption("dist") != "no" and not config.getvalue("collectonly"): + config_line = ( + "xdist_group: specify group for tests should run in same session." + "in relation to one another. Provided by pytest-xdist." + ) + config.addinivalue_line("markers", config_line) + + # Skip this plugin entirely when only doing collection. + if config.getvalue("collectonly"): + return + + # Create the distributed session in case we have a valid distribution + # mode and test environments. + if config.getoption("dist") != "no" and config.getoption("tx"): from xdist.dsession import DSession session = DSession(config) @@ -199,6 +211,7 @@ def pytest_configure(config): if tr: tr.showfspath = False + # Deprecation warnings for deprecated command-line/configuration options. if config.getoption("looponfail", None) or config.getini("looponfailroots"): warning = DeprecationWarning( "The --looponfail command line argument and looponfailroots config variable are deprecated.\n" @@ -213,12 +226,6 @@ def pytest_configure(config): ) config.issue_config_time_warning(warning, 2) - config_line = ( - "xdist_group: specify group for tests should run in same session." - "in relation to one another. " + "Provided by pytest-xdist." - ) - config.addinivalue_line("markers", config_line) - @pytest.hookimpl(tryfirst=True) def pytest_cmdline_main(config): diff --git a/testing/acceptance_test.py b/testing/acceptance_test.py index 792852d1..1666ba03 100644 --- a/testing/acceptance_test.py +++ b/testing/acceptance_test.py @@ -1561,3 +1561,21 @@ def test_collection_crash(testdir): "*= 1 error in *", ] ) + + +def test_dist_in_addopts(testdir): + """Users can set a default distribution in the configuration file (#789).""" + testdir.makepyfile( + """ + def test(): + pass + """ + ) + testdir.makeini( + """ + [pytest] + addopts = --dist loadscope + """ + ) + result = testdir.runpytest() + assert result.ret == 0