Как запустить прибор один раз для каждого запуска другого прибора - PullRequest
0 голосов
/ 04 января 2019

Conftest.py

@pytest.fixture(scope="module")
def fixture2(request):
    do something

@pytest.fixture(scope="session", params=[ 1, 2, 3 ])
def fixture1(request):
    do something else

test_file.py

@pytest.mark.usefixtures('fixture2', 'fixture1')
class TestSomething1(object):
    def test_1(self):
        pass

    def test_2(self):
        pass

@pytest.mark.usefixtures('fixture1')
class TestSomething2(object):
    def test_3(self):
        pass

    def test_4(self):
        pass

что происходит, я получаю 3 набора тестов (1 набор для каждого вызова fixture1), но fixture2 запускается только один раз для всех 3 наборов тестов (по крайней мере, это мое понимание). Я не уверен, как заставить его запускаться один раз для каждого запуска fixture1 (не один раз для каждого теста).

Что я в итоге сделал:

@pytest.fixture(scope="module")
def fixture2(request, fixture1):
    do something

@pytest.fixture(scope="session", params=[ 1, 2, 3 ])
def fixture1(request):
    do something else

1 Ответ

0 голосов
/ 04 января 2019

Измените @pytest.fixture(scope="module") на что-то еще, например @pytest.fixture(scope="class") или @pytest.fixture(scope="function"). Область применения модуля означает его запуск один раз на модуль.

Из документации аргументов прибора:

scope - область, для которой этот прибор используется совместно, одна из «функций» (по умолчанию), "класс", "модуль", "пакет" или "сессия".

«пакет» в настоящее время считается экспериментальным.

Документация Pytest по областям применения

сделать fixture1 зависимым от fixture2 и использовать те же области, если вы хотите, чтобы один прибор вызывался один раз при каждом вызове другого.

...