Проблему демонстрирует следующий код:
Код: Выделить всё
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
Я ожидаю получить Counter({'A1': 1, 'A2': 1, 'A3': 1}) - один вызов для каждого параметра значение.
В случае, если это актуально, я использую Python 3.12.3, pytest-8.3.4
PS: все 12 тестов пройдены — это хорошо.
PPS: при удалении одного уровня вложенности проблема исчезает, и сначала вызывается ровно один раз для каждого значения параметра.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-pytest