Предотвратить дубликаты в параметрах pytest - PullRequest
0 голосов
/ 26 марта 2020

Если есть несколько параметров, имеющих дубликаты, есть ли способ отключить выполнение теста с дублирующимися параметрами.
Примечание. Я поместил минимальный фрагмент кода для решения проблемы, с которой я столкнулся.

test_file .py

import pytest

def pytest_generate_tests(metafunc):
    """
    Parse the fixture dynamically. 
    """
    for fixture in metafunc.fixturenames:
        if fixture == ("sample_fixture"):
            param_list = load_sample_tests()
            if param_list:
                metafunc.parametrize(fixture, param_list)


def load_sample_tests():
    param_list = []
    for each in ["a", "b", "a", "c"]:
        param_list.append(pytest.param(each, id=each))
    return param_list


def test_one(sample_fixture):
    pass

Вывод:

collected 4 items

test_one.py::test_one[a0] PASSED                                                                                                                                                                   [ 25%]
test_one.py::test_one[b] PASSED                                                                                                                                                                    [ 50%]
test_one.py::test_one[a1] PASSED                                                                                                                                                                   [ 75%]
test_one.py::test_one[c] PASSED                                                                                                                                                                    [100%]

Я не хочу, чтобы контрольный пример выполнялся два раза с параметром a. Есть ли какой-либо параметр или конфигурации, чтобы отключить его? или мне приходится их дедуплицировать вручную?

1 Ответ

0 голосов
/ 21 апреля 2020

Добавление следующей функции в плагин помогло дублировать тестовые случаи.

    def dedup_tests(self, test_list):
        """
        Deduplicate the test case parameters based on param.id

        Args:
            test_list(Generator): Generator of pytest.param

        Yields:
            Generator: De-duplicated pytest.param
        """
        seen_tests = set()
        for each_param in test_list:
            if each_param.id not in seen_tests:
                yield each_param
                seen_tests.add(each_param.id)

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