Можно ли пропустить тест, созданный из нескольких строк @ pytest.mark.parametrize? - PullRequest
0 голосов
/ 05 августа 2020

У меня есть тестовая функция pytest с несколькими строками @ pytest.mark.parametrize. Значения для каждой параметризованной переменной могут принимать либо 0, либо 1. Некоторые из сгенерированных комбинаций не могут произойти, и их следует пропустить, например, в моем примере, когда субконтакт принимает значение 0, а когда ускоренный трек принимает значение 1, его следует пропускать. Возможно ли добиться этого с помощью фикстуры multiple @ pytest.mark.parametrize?

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

@pytest.mark.parametrize('prospect', [0, 1])
@pytest.mark.parametrize('client', [0, 1])
@pytest.mark.parametrize('subcontact', [0, 1])
@pytest.mark.parametrize('default', [0, 1])
@pytest.mark.parametrize('primary_contact', [0, 1])
@pytest.mark.parametrize('fast_track', [0, pytest.param(1, marks=pytest.mark.skipif('subcontact' == 0,
                                                                                    reason='Cannot happen'))])
def test_prospect_registration(prospect, client, subcontact, default,
                               primary_contact,
                               fast_track):
    pass

1 Ответ

2 голосов
/ 05 августа 2020

Самая простая возможность - это, вероятно, пропустить указанный c тест внутри тела теста:

...
def test_prospect_registration(prospect, client, subcontact, default,
                               primary_contact,
                               fast_track):
    if fast_track == 1 and subcontact == 0:
        pytest.skip('Cannot happen')
    ...

Вы также можете пропустить в фикстуре на основе имени теста (параметры перечислены из последний mark.parametrize декоратор вверх):

import re

@pytest.fixture(autouse=True)
def skip_unwanted(request):
    if re.match(r'test_prospect_registration\[1-.*-.*-.0.*-.*\]', item.name)
        pytest.skip('Cannot happen')

или вы можете сделать то же самое в pytest_collection_modifyitems:

conftest.py

def pytest_collection_modifyitems(config, items):
    for item in items:
        if re.match(r'test_prospect_registration\[1-.*-.*-.0.*-.*\]', item.name):
            item.add_marker('skip')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...