PyTest: динамическое создание имени теста во время выполнения - PullRequest
1 голос
/ 20 апреля 2020

Я хочу назвать тест динамически во время выполнения, когда я запускаю их с помощью приспособления @pytest.mark.parametrize("value",values_list). например:

values_list=['apple','tomatoes','potatoes']

@pytest.mark.parametrize("value",values_list)
def test_xxx(self,value):
    assert value==value

конечный результат, который я хочу увидеть, - это 3 теста со следующими именами:

test_apple

test_tomatoes

test_potatoes

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

1 Ответ

2 голосов
/ 20 апреля 2020

Вы можете изменить имена, отображаемые при выполнении теста, переписав атрибут _nodeid элемента теста. Пример: создайте файл с именем conftest.py в вашем проекте / тесте root dir со следующим содержимым:

def pytest_collection_modifyitems(items):
    for item in items:
        # check that we are altering a test named `test_xxx`
        # and it accepts the `value` arg
        if item.originalname == 'test_xxx' and 'value' in item.fixturenames:
            item._nodeid = item.nodeid.replace(']', '').replace('xxx[', '')

Выполнение ваших тестов теперь даст

test_fruits.py::test_apple PASSED
test_fruits.py::test_tomatoes PASSED
test_fruits.py::test_potatoes PASSED

Остерегайтесь этой перезаписи _nodeid следует использовать с осторожностью, так как каждый nodeid должен оставаться уникальным. В противном случае pytest молча прекратит выполнение некоторых тестов, и будет трудно понять, почему.

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