diff --git a/src/xdist/plugin.py b/src/xdist/plugin.py index 4a0488e7..8ffeda30 100644 --- a/src/xdist/plugin.py +++ b/src/xdist/plugin.py @@ -164,20 +164,6 @@ def pytest_addhooks(pluginmanager): @pytest.mark.trylast def pytest_configure(config): - 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") - if tr: - tr.showfspath = False - if config.getoption("boxed"): - config.option.forked = True - - -@pytest.mark.tryfirst -def pytest_cmdline_main(config): usepdb = config.getoption("usepdb", False) # a core option if isinstance(config.option.numprocesses, AutoInt): config.option.numprocesses = 0 if usepdb else int(config.option.numprocesses) @@ -199,6 +185,17 @@ def pytest_cmdline_main(config): "--pdb is incompatible with distributing tests; try using -n0 or -nauto." ) # noqa: E501 + 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") + if tr: + tr.showfspath = False + if config.getoption("boxed"): + config.option.forked = True + # ------------------------------------------------------------------------- # fixtures diff --git a/testing/test_plugin.py b/testing/test_plugin.py index dc0fc518..e7316333 100644 --- a/testing/test_plugin.py +++ b/testing/test_plugin.py @@ -14,29 +14,28 @@ def test_dist_incompatibility_messages(testdir): assert "incompatible" in result.stderr.str() -def test_dist_options(testdir): - from xdist.plugin import pytest_cmdline_main as check_options +def test_pdb_can_be_used_before_configure(testdir): + result = testdir.runpytest("--pdb", "-n", "2", "--version") + assert result.ret == 0 + assert "pytest version" in result.stderr.str() + +def test_dist_options(testdir): config = testdir.parseconfigure("-n 2") - check_options(config) assert config.option.dist == "load" assert config.option.tx == ["popen"] * 2 config = testdir.parseconfigure("--numprocesses", "2") - check_options(config) assert config.option.dist == "load" assert config.option.tx == ["popen"] * 2 config = testdir.parseconfigure("--numprocesses", "3", "--maxprocesses", "2") - check_options(config) assert config.option.dist == "load" assert config.option.tx == ["popen"] * 2 config = testdir.parseconfigure("-d") - check_options(config) assert config.option.dist == "load" def test_auto_detect_cpus(testdir, monkeypatch): import os - from xdist.plugin import pytest_cmdline_main as check_options if hasattr(os, "sched_getaffinity"): monkeypatch.setattr(os, "sched_getaffinity", lambda _pid: set(range(99))) @@ -54,7 +53,6 @@ def test_auto_detect_cpus(testdir, monkeypatch): assert config.getoption("numprocesses") == 99 config = testdir.parseconfigure("-nauto", "--pdb") - check_options(config) assert config.getoption("usepdb") assert config.getoption("numprocesses") == 0 @@ -65,33 +63,21 @@ def test_auto_detect_cpus(testdir, monkeypatch): 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")