From 2d4c13dba8e37466f4b0e71166394217657fd394 Mon Sep 17 00:00:00 2001 From: Daniel Hahler Date: Wed, 19 Sep 2018 12:31:00 +0200 Subject: [PATCH] logging: del item.catch_log_handler only in teardown Without this caplog.record_tuples etc is not available when using `pdb.set_trace()` in a test. Ref: https://github.com/pytest-dev/pytest/issues/3099 --- src/_pytest/logging.py | 2 +- testing/test_pdb.py | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/_pytest/logging.py b/src/_pytest/logging.py index c9c65c4c18d..2d0f54a6454 100644 --- a/src/_pytest/logging.py +++ b/src/_pytest/logging.py @@ -445,8 +445,8 @@ def _runtest_for(self, item, when): try: yield # run test finally: - del item.catch_log_handler if when == "teardown": + del item.catch_log_handler del item.catch_log_handlers if self.print_logs: diff --git a/testing/test_pdb.py b/testing/test_pdb.py index ed1c49a1acf..171391a4248 100644 --- a/testing/test_pdb.py +++ b/testing/test_pdb.py @@ -397,6 +397,22 @@ def test_1(capsys): child.read() self.flush(child) + def test_pdb_with_caplog_on_pdb_invocation(self, testdir): + p1 = testdir.makepyfile( + """ + def test_1(capsys, caplog): + import logging + logging.getLogger(__name__).warning("some_warning") + assert 0 + """ + ) + child = testdir.spawn_pytest('--pdb %s' % str(p1)) + child.send("caplog.record_tuples\n") + child.expect_exact("[('test_pdb_with_caplog_on_pdb_invocation', 30, 'some_warning')]") + child.sendeof() + child.read() + self.flush(child) + def test_set_trace_capturing_afterwards(self, testdir): p1 = testdir.makepyfile( """