Что происходит, когда вы используете одно и то же устройство дважды, явно и неявно, в одно и то же время? - PullRequest
0 голосов
/ 28 октября 2019

У меня есть функция, которая использует пару фикстур 'session_id' и 'set_namespace'. Недавно я заметил, что прибор 'set_namespace' использует сам прибор 'session_id'. Обе области действия светильников установлены на сеанс. Означает ли это, что я получу разные результаты в каждом приборе?

мой код:

@pytest.fixture(scope='session')
def session_id():
    return random_id(length=5)


@pytest.fixture(scope='session')
def set_namespace(request, session_id, load_config):
    some_dict['namespace'] = session_id


def some_function(session_id, set_namespace):
    does_something

1 Ответ

0 голосов
/ 28 октября 2019

Нет, вы получите тот же идентификатор сеанса, потому что 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 не учитывает области действия и, следовательно, отображает неправильный порядок.

...