Нет, вы получите тот же идентификатор сеанса, потому что pytest гарантирует, что каждый прибор вызывается только определенное количество раз в зависимости от набора scope
. Тот факт, что один прибор использует другой, не меняет этот принцип. Что именно происходит, в каком порядке можно отобразить, используя флаг --setup-show
.
Код теста
# tests/test.py
from uuid import uuid4
@pytest.fixture(scope="session")
def session_id():
return str(uuid4())
@pytest.fixture(scope="session")
def set_namespace(session_id):
return {"id": session_id}
def test_a(session_id, set_namespace):
print("\n", session_id, set_namespace, sep="\n")
def test_b(session_id, set_namespace):
print("\n", session_id, set_namespace, sep="\n")
Результат
$ pytest --setup-show ./tests/test.py
:
SETUP S session_id
SETUP S set_namespace (fixtures used: session_id)
tests/test.py::test_a (fixtures used: session_id, set_namespace)
6d3c5d86-4aee-4372-8167-f9c811e69cdc
{'id': '6d3c5d86-4aee-4372-8167-f9c811e69cdc'}
.
tests/test.py::test_b (fixtures used: session_id, set_namespace)
6d3c5d86-4aee-4372-8167-f9c811e69cdc
{'id': '6d3c5d86-4aee-4372-8167-f9c811e69cdc'}
.
TEARDOWN S set_namespace
TEARDOWN S session_id
Примечание : у pytest также есть флаг --setup-plan
, который не выполняет ничего, кроме того, что IMHO не учитывает области действия и, следовательно, отображает неправильный порядок.