Der folgende Code zeigt das Problem:
Code: Select all
from collections import Counter
import pytest
state = Counter()
@pytest.fixture(scope="session", autouse=True)
def setup_session():
yield None
print(state)
@pytest.fixture(scope="session", params=["A1", "A2", "A3"])
def first(request):
state[request.param] += 1
return request.param
@pytest.fixture(scope="session", params=["B1", "B2"])
def second(first, request):
return first + request.param
@pytest.fixture(scope="session", params=["C1", "C2"])
def third(second, request):
return second + request.param
def test_length(third):
assert len(third) == 6
Ich erwarte Counter({'A1': 1, 'A2': 1, 'A3': 1}) – einen Aufruf für jeden Parameter Wert.
Falls das relevant ist, verwende ich Python 3.12.3, pytest-8.3.4
PS: Alle 12 Tests bestehen – das ist gut.
PPS: Beim Entfernen einer Verschachtelungsebene verschwindet das Problem und zuerst wird genau einmal pro Parameterwert aufgerufen.