From f31875a01ee192d2e851e7935214d64a83580067 Mon Sep 17 00:00:00 2001 From: Nico Della Torre Date: Fri, 30 Oct 2026 21:49:31 +0100 Subject: [PATCH] fix: rerun count with pytest-rerunfailures 16.7 pytest-rerunfailures 16.7 reports a teardown after each rerun attempt. Ignore it so that stored reruns are not processed again. Fixes #1085 --- src/pytest_html/basereport.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/pytest_html/basereport.py b/src/pytest_html/basereport.py index cfcc74b2..a208e458 100644 --- a/src/pytest_html/basereport.py +++ b/src/pytest_html/basereport.py @@ -32,6 +32,7 @@ def __init__(self, report_path, config, report_data, template, css): ) self._reports = defaultdict(dict) + self._pending_reruns = set() self._report = report_data self._report.title = self._report_path.name self._suite_start_time = time.time() @@ -225,7 +226,14 @@ def pytest_runtest_logreport(self, report): if key not in self._reports[report.nodeid]: self._reports[report.nodeid][key] = list() self._reports[report.nodeid][key].append(report) + self._pending_reruns.add(report.nodeid) else: + if report.nodeid in self._pending_reruns: + self._pending_reruns.discard(report.nodeid) + # pytest-rerunfailures >= 16.7 reports a teardown after each + # rerun attempt: it does not mark the end of the test. + if report.when == "teardown": + return self._reports[report.nodeid][key] = [report] finished = report.when == "teardown" and report.outcome != "rerun"