Skip to content

Flaky reruns autouse session-scoped fixtures when a tests fails one of its runs #207

@JimArnow

Description

@JimArnow

When a test fails and is rerun, Flaky reruns session-scoped autouse fixtures. For example, running this test:

import pytest

@pytest.fixture(scope="session", autouse=True)
def my_session_scoped_autouse_fixture():
    print("\nIn session scope autouse fixture")

@pytest.mark.flaky(max_runs=3)
def test_flaky_reruns(local_list = []):
    local_list.append(0)
    assert len(local_list)==3

calls the fixture 3 times:

============================= test session starts ==============================
collecting ... collected 1 item

test_it.py::test_flaky_reruns 
In session scope autouse fixture

In session scope autouse fixture

In session scope autouse fixture
PASSED

============================== 1 passed in 0.01s ===============================

Process finished with exit code 0

This can cause unexpected behaviors. In my case, I'm using the pytest-playwright package which has a session-scoped autouse fixture that deletes the output directory where traces are stored for failing tests. If a test fails and is rerun, any previously created trace files are deleted.

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