Improve behavior of -n=auto with --pdb option

This commit is contained in:
Jiri Kuncar
2019-02-12 14:36:19 +01:00
parent ca032692a8
commit d8a794bc84
3 changed files with 19 additions and 5 deletions

1
changelog/415.feature Normal file
View File

@@ -0,0 +1 @@
Improve behavior of ``--numprocesses=auto`` to work well with ``--pdb`` option.

View File

@@ -36,6 +36,7 @@ def test_dist_options(testdir):
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)))
@@ -52,6 +53,11 @@ def test_auto_detect_cpus(testdir, monkeypatch):
config = testdir.parseconfigure("-nauto")
assert config.getoption("numprocesses") == 99
config = testdir.parseconfigure("-nauto", "--pdb")
check_options(config)
assert config.getoption("usepdb")
assert config.getoption("numprocesses") == 0
monkeypatch.delattr(os, "sched_getaffinity", raising=False)
monkeypatch.setenv("TRAVIS", "true")
config = testdir.parseconfigure("-nauto")

View File

@@ -27,10 +27,14 @@ def auto_detect_cpus():
return n if n else 1
class AutoInt(int):
"""Mark value as auto-detected."""
def parse_numprocesses(s):
if s == "auto":
return auto_detect_cpus()
else:
return AutoInt(auto_detect_cpus())
elif s is not None:
return int(s)
@@ -45,7 +49,7 @@ def pytest_addoption(parser):
type=parse_numprocesses,
help="shortcut for '--dist=load --tx=NUM*popen', "
"you can use 'auto' here for auto detection CPUs number on "
"host system",
"host system and it will be 0 when used with --pdb",
)
group.addoption(
"--maxprocesses",
@@ -177,6 +181,10 @@ def pytest_configure(config):
@pytest.mark.tryfirst
def pytest_cmdline_main(config):
usepdb = config.getoption("usepdb") # a core option
if isinstance(config.option.numprocesses, AutoInt):
config.option.numprocesses = 0 if usepdb else int(config.option.numprocesses)
if config.option.numprocesses:
if config.option.dist == "no":
config.option.dist = "load"
@@ -188,11 +196,10 @@ def pytest_cmdline_main(config):
config.option.dist = "load"
val = config.getvalue
if not val("collectonly"):
usepdb = config.getoption("usepdb") # a core option
if val("dist") != "no":
if usepdb:
raise pytest.UsageError(
"--pdb is incompatible with distributing tests; try using -n0."
"--pdb is incompatible with distributing tests; try using -n0 or -nauto."
) # noqa: E501