Skip to content

Commit 9f3ea0e

Browse files
committed
print captured logs before entering pdb, unless --no-print-logs is defined
1 parent 3bc8b50 commit 9f3ea0e

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

_pytest/debugging.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,12 @@ def _enter_pdb(node, excinfo, rep):
9797
tw.sep(">", "captured stderr")
9898
tw.line(captured_stderr)
9999

100+
captured_logs = rep.caplog
101+
if len(captured_logs) > 0:
102+
if node.config.getoption('log_print') is not False:
103+
tw.sep(">", "captured logs")
104+
tw.line(captured_logs)
105+
100106
tw.sep(">", "traceback")
101107
rep.toterminal(tw)
102108
tw.sep(">", "entering PDB")

changelog/3204.feature

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Captured logs are printed before entering pdb, unless ``--no-print-logs`` is defined.

testing/test_pdb.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,56 @@ def test_1():
187187
assert "captured stderr" not in output
188188
self.flush(child)
189189

190+
def test_pdb_print_captured_logs(self, testdir):
191+
p1 = testdir.makepyfile("""
192+
def test_1():
193+
import logging
194+
logging.warn("get rekt")
195+
assert False
196+
""")
197+
child = testdir.spawn_pytest("--pdb %s" % p1)
198+
child.expect("captured logs")
199+
child.expect("get rekt")
200+
child.expect("(Pdb)")
201+
child.sendeof()
202+
rest = child.read().decode("utf8")
203+
assert "1 failed" in rest
204+
self.flush(child)
205+
206+
def test_pdb_dont_print_captured_logs_when_no_print_logs_is_defined(self, testdir):
207+
p1 = testdir.makepyfile("""
208+
def test_1():
209+
import logging
210+
logging.warn("get rekt")
211+
assert False
212+
""")
213+
child = testdir.spawn_pytest("--pdb --no-print-logs %s" % p1)
214+
child.expect("get rekt")
215+
output = child.before.decode("utf8")
216+
assert "captured logs" not in output
217+
child.expect("(Pdb)")
218+
child.sendeof()
219+
rest = child.read().decode("utf8")
220+
assert "1 failed" in rest
221+
self.flush(child)
222+
223+
def test_pdb_doesnt_print_captured_logs_when_logging_plugin_is_disabled(self, testdir):
224+
p1 = testdir.makepyfile("""
225+
def test_1():
226+
import logging
227+
logging.warn("get rekt")
228+
assert False
229+
""")
230+
child = testdir.spawn_pytest("--pdb -p no:logging %s" % p1)
231+
child.expect("get rekt")
232+
output = child.before.decode("utf8")
233+
assert "captured logs" not in output
234+
child.expect("(Pdb)")
235+
child.sendeof()
236+
rest = child.read().decode("utf8")
237+
assert "1 failed" in rest
238+
self.flush(child)
239+
190240
def test_pdb_interaction_exception(self, testdir):
191241
p1 = testdir.makepyfile("""
192242
import pytest

0 commit comments

Comments
 (0)