pytest: не группируются параметры, сгенерированные в pytest_generate_tests, как ожидалось - PullRequest
0 голосов
/ 28 марта 2020

conftest.py:

@pytest.fixture(scope='session')
def fw_config(request):
    logging.info(f'fw_config called with {request.param}')

    return request.param


def pytest_generate_tests(metafunc):
    if 'fw_config' in metafunc.fixturenames:
        configs_to_test = ['ABC', 'DEF']
        pattern = metafunc.definition.get_closest_marker('config_pattern')

        if pattern is None:
            pattern = '.*'
        else:
            assert len(pattern.args) == 1
            pattern = pattern.args[0]

        regex = re.compile(pattern)
        configs_to_test = filter(regex.match, configs_to_test)

        metafunc.parametrize(argnames='fw_config', argvalues=configs_to_test, ids=configs_to_test, scope='session', indirect=True)

тестовый файл:

class TestGrouping:

    @pytest.mark.config_pattern(r'.*ABC.*')
    def test_abc(self, fw_config):
        time.sleep(4)
        return True

    @pytest.mark.config_pattern(r'.*DEF.*')
    def test_def(self, fw_config):
        time.sleep(4)
        return True
    def test_all(self, fw_config):
        time.sleep(4)
    return True

Поскольку fw_config имеет сессионную область, я надеюсь, что тесты будут выполняться в следующем порядке:

test_abc [ABC] test_all [ABC] test_def [DEF] test_all [DEF]

И этот fw_config будет вызываться только дважды.

Однако вместо этого они вызываются в следующий порядок:

test_abc [ABC] test_def [DEF] test_all [ABC] test_all [DEF]

и fw_config вызывается четыре раза.

Я пытался почти месяц, чтобы получить это поведение, используя различные методы, и я не смог его достичь.

Я знаю, что я могу просто использовать test_ab c skip (), если fw_config равен 'DEF', но тогда у меня есть пропущенный тест в моем выводе. Я не хочу запускать тест вообще.

fw_config - это замена дорогой конфигурации с именем. Некоторые тесты должны выполняться на всех конфигах, а некоторые тесты должны выполняться только на подмножестве.

Есть ли способ сделать это? Я что-то делаю неправильно?

Я предполагаю, что на самом деле есть три экземпляра создаваемого прибора, и Pytest рассматривает их как полностью разделенные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...