Skip to content

Commit 966d4fb

Browse files
Merge pull request #10051 from EmptyRabbit/dev_main
Fix stage caplog records not clear
2 parents 4449bdc + 8726597 commit 966d4fb

File tree

4 files changed

+25
-2
lines changed

4 files changed

+25
-2
lines changed

AUTHORS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,5 +366,6 @@ Yuval Shimon
366366
Zac Hatfield-Dodds
367367
Zachary Kneupper
368368
Zachary OBrien
369+
Zhouxin Qiu
369370
Zoltán Máté
370371
Zsolt Cserna

changelog/9877.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Ensure ``caplog.get_records(when)`` returns current/correct data after invoking ``caplog.clear()``.

src/_pytest/logging.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
else:
4141
logging_StreamHandler = logging.StreamHandler
4242

43-
4443
DEFAULT_LOG_FORMAT = "%(levelname)-8s %(name)s:%(filename)s:%(lineno)d %(message)s"
4544
DEFAULT_LOG_DATE_FORMAT = "%H:%M:%S"
4645
_ANSI_ESCAPE_SEQ = re.compile(r"\x1b\[[\d;]+m")
@@ -345,6 +344,10 @@ def reset(self) -> None:
345344
self.records = []
346345
self.stream = StringIO()
347346

347+
def clear(self) -> None:
348+
self.records.clear()
349+
self.stream = StringIO()
350+
348351
def handleError(self, record: logging.LogRecord) -> None:
349352
if logging.raiseExceptions:
350353
# Fail the test if the log message is bad (emit failed).
@@ -440,7 +443,7 @@ def messages(self) -> List[str]:
440443

441444
def clear(self) -> None:
442445
"""Reset the list of log records and the captured log text."""
443-
self.handler.reset()
446+
self.handler.clear()
444447

445448
def set_level(self, level: Union[int, str], logger: Optional[str] = None) -> None:
446449
"""Set the level of a logger for the duration of a test.

testing/logging/test_fixture.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,24 @@ def test_caplog_captures_for_all_stages(caplog, logging_during_setup_and_teardow
172172
assert set(caplog._item.stash[caplog_records_key]) == {"setup", "call"}
173173

174174

175+
def test_clear_for_call_stage(caplog, logging_during_setup_and_teardown):
176+
logger.info("a_call_log")
177+
assert [x.message for x in caplog.get_records("call")] == ["a_call_log"]
178+
assert [x.message for x in caplog.get_records("setup")] == ["a_setup_log"]
179+
assert set(caplog._item.stash[caplog_records_key]) == {"setup", "call"}
180+
181+
caplog.clear()
182+
183+
assert caplog.get_records("call") == []
184+
assert [x.message for x in caplog.get_records("setup")] == ["a_setup_log"]
185+
assert set(caplog._item.stash[caplog_records_key]) == {"setup", "call"}
186+
187+
logging.info("a_call_log_after_clear")
188+
assert [x.message for x in caplog.get_records("call")] == ["a_call_log_after_clear"]
189+
assert [x.message for x in caplog.get_records("setup")] == ["a_setup_log"]
190+
assert set(caplog._item.stash[caplog_records_key]) == {"setup", "call"}
191+
192+
175193
def test_ini_controls_global_log_level(pytester: Pytester) -> None:
176194
pytester.makepyfile(
177195
"""

0 commit comments

Comments
 (0)