diff --git a/testing/acceptance_test.py b/testing/acceptance_test.py index 42345d7..3a500c9 100644 --- a/testing/acceptance_test.py +++ b/testing/acceptance_test.py @@ -262,6 +262,16 @@ class TestDistribution: child.close() # assert ret == 2 + def test_dist_with_collectonly(self, testdir): + p1 = testdir.makepyfile(""" + def test_ok(): + pass + """) + result = testdir.runpytest(p1, "-n1", "--collect-only") + assert result.ret == 0 + result.stdout.fnmatch_lines([ + "*collected 1 item*", + ]) class TestDistEach: def test_simple(self, testdir): diff --git a/testing/test_plugin.py b/testing/test_plugin.py index 319e2ec..b7b0760 100644 --- a/testing/test_plugin.py +++ b/testing/test_plugin.py @@ -43,6 +43,33 @@ def test_auto_detect_cpus(testdir, monkeypatch): config = testdir.parseconfigure("-nauto") assert config.getoption('numprocesses') == 99 +def test_boxed_with_collect_only(testdir): + from xdist.plugin import pytest_cmdline_main as check_options + config = testdir.parseconfigure("-n1", "--boxed") + check_options(config) + assert config.option.forked + + config = testdir.parseconfigure("-n1", "--collect-only") + check_options(config) + assert not config.option.forked + + config = testdir.parseconfigure("-n1", "--boxed", "--collect-only") + check_options(config) + assert config.option.forked + +def test_dsession_with_collect_only(testdir): + from xdist.plugin import pytest_cmdline_main as check_options + from xdist.plugin import pytest_configure as configure + + config = testdir.parseconfigure("-n1") + check_options(config) + configure(config) + assert config.pluginmanager.hasplugin("dsession") + + config = testdir.parseconfigure("-n1", "--collect-only") + check_options(config) + configure(config) + assert not config.pluginmanager.hasplugin("dsession") class TestDistOptions: def test_getxspecs(self, testdir): diff --git a/xdist/plugin.py b/xdist/plugin.py index 6f46ac1..a19515d 100644 --- a/xdist/plugin.py +++ b/xdist/plugin.py @@ -91,15 +91,14 @@ def pytest_addhooks(pluginmanager): @pytest.mark.trylast def pytest_configure(config): - if not config.getvalue("collectonly"): - if config.getoption("dist") != "no": - from xdist.dsession import DSession - session = DSession(config) - config.pluginmanager.register(session, "dsession") - tr = config.pluginmanager.getplugin("terminalreporter") - tr.showfspath = False - if config.getoption("boxed"): - config.option.forked = True + if config.getoption("dist") != "no" and not config.getvalue("collectonly"): + from xdist.dsession import DSession + session = DSession(config) + config.pluginmanager.register(session, "dsession") + tr = config.pluginmanager.getplugin("terminalreporter") + tr.showfspath = False + if config.getoption("boxed"): + config.option.forked = True @pytest.mark.tryfirst