diff --git a/CHANGES.rst b/CHANGES.rst index 8638e1c..ed6571b 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -7,6 +7,11 @@ Changelog - Fix missing teardown for session and module scoped fixtures when fixture teardown fails. Fixes `#314 `_. +- Clear fixture finalizers when removing cached results from failed fixtures + to fix compatibility with pytest >= 9, which asserts that ``_finalizers`` is + empty before executing a fixture. + Fixes `#323 `_. + 16.1 (2025-10-10) ----------------- diff --git a/src/pytest_rerunfailures.py b/src/pytest_rerunfailures.py index 63223ae..a2cceed 100644 --- a/src/pytest_rerunfailures.py +++ b/src/pytest_rerunfailures.py @@ -244,6 +244,11 @@ def _remove_cached_results_from_failed_fixtures(item): result, _, err = getattr(fixture_def, cached_result) if err: # Deleting cached results for only failed fixtures setattr(fixture_def, cached_result, None) + # Clear finalizers registered during the failed execution + # so the fixture can be re-executed cleanly (pytest >= 9 + # asserts _finalizers is empty before executing a fixture). + if hasattr(fixture_def, "_finalizers"): + fixture_def._finalizers.clear() def _remove_failed_setup_state_from_session(item):