Skip to content

pytest_runtest_logreport does not report "teardown" when using pytest-rerunfailures #237

@BeyondEvil

Description

@BeyondEvil

Description

When using the pytest-rerunfailures plugin and marking a test as "flaky", the pytest_runtest_logreport-hook is only called for the last occurrence of a "teardown" despite it still being run (evident in the output below).

pip list

Package Version
exceptiongroup 1.1.3
iniconfig 2.0.0
packaging 23.2
pip 21.2.4
pluggy 1.3.0
pytest 7.4.2
pytest-rerunfailures 12.0
setuptools 58.1.0
tomli 2.0.1

Python: 3.9.10
OS: osx 12.3 (M1 MacBook Pro)

Example:

# conftest.py
import pytest

@pytest.hookimpl(trylast=True)
def pytest_runtest_logreport(report):
    print("\nWHEN: ", report.when)

# test_reportlog.py
import pytest

@pytest.fixture
def fix():
    assert True
    yield
    print("\nTEARDOWN CALLED")
    assert True

@pytest.mark.flaky(reruns=1)
def test_logreport(fix):
    assert False

Output:

$ pytest -s
============================= test session starts ==============================
platform darwin -- Python 3.9.10, pytest-7.4.2, pluggy-1.3.0
rootdir: /Users/itsme/dev/pytest-logreport-rerunfailure
plugins: rerunfailures-12.0
collected 1 item

test_reportlog.py 
TEARDOWN CALLED

WHEN:  setup
R
WHEN:  call

TEARDOWN CALLED

WHEN:  setup
F
WHEN:  call

WHEN:  teardown


=================================== FAILURES ===================================
________________________________ test_logreport ________________________________

fix = None

    @pytest.mark.flaky(reruns=1)
    def test_logreport(fix):
>       assert False
E       assert False

test_reportlog.py:12: AssertionError
=========================== short test summary info ============================
FAILED test_reportlog.py::test_logreport - assert False
========================== 1 failed, 1 rerun in 0.02s ==========================
  • a detailed description of the bug or problem you are having
  • output of pip list from the virtual environment you are using
  • pytest and operating system versions
  • minimal example if possible

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions