pdb: add option to skip `pdb.set_trace()`

This commit is contained in:
Daniel Hahler 2019-02-28 14:18:16 +01:00
parent 6b5cddc48a
commit adebfd0a84
3 changed files with 29 additions and 0 deletions

View File

@ -0,0 +1,5 @@
The ``--pdb-skip`` option can now be used to ignore calls to
``pdb.set_trace()`` (and ``pytest.set_trace()``).
This is meant to help while debugging, where you want to use e.g. ``--pdb`` or
``--trace`` only, or just run the tests again without any interruption.

View File

@ -59,6 +59,13 @@ def pytest_addoption(parser):
action="store_true",
help="Immediately break when running each test.",
)
group._addoption(
"--pdb-skip",
"--pdb-ignore-set_trace",
dest="pdb_ignore_set_trace",
action="store_true",
help="Ignore calls to pdb.set_trace().",
)
def pytest_configure(config):
@ -202,6 +209,9 @@ class pytestPDB(object):
@classmethod
def set_trace(cls, *args, **kwargs):
"""Invoke debugging via ``Pdb.set_trace``, dropping any IO capturing."""
if pytestPDB._config: # Might not be available when called directly.
if pytestPDB._config.getoption("pdb_ignore_set_trace"):
return
frame = sys._getframe().f_back
_pdb = cls._init_pdb(*args, **kwargs)
_pdb.set_trace(frame)

View File

@ -10,6 +10,7 @@ import sys
import _pytest._code
import pytest
from _pytest.debugging import _validate_usepdb_cls
from _pytest.main import EXIT_NOTESTSCOLLECTED
try:
breakpoint
@ -1112,3 +1113,16 @@ def test_pdb_suspends_fixture_capturing(testdir, fixture):
assert child.exitstatus == 0
assert "= 1 passed in " in rest
assert "> PDB continue (IO-capturing resumed for fixture %s) >" % (fixture) in rest
def test_pdb_skip_option(testdir):
p = testdir.makepyfile(
"""
print("before_set_trace")
__import__('pdb').set_trace()
print("after_set_trace")
"""
)
result = testdir.runpytest_inprocess("--pdb-ignore-set_trace", "-s", p)
assert result.ret == EXIT_NOTESTSCOLLECTED
result.stdout.fnmatch_lines(["*before_set_trace*", "*after_set_trace*"])