Как сгруппировать / заказать параметризованные тесты в классе pytest - PullRequest
0 голосов
/ 31 марта 2020

У меня есть этот тестовый класс:

@pytest.mark.parametrize(["arg"], [["one"], ["two"]])
class TestFoo:
    def test_a(self, arg):
        print("a", arg)

    def test_b(self, arg):
        print("b", arg)

Я получаю этот вывод:

a one
a two
b one
b two

Что я могу сделать, чтобы получить этот вывод?

a one
b one
a two
b two

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

1 Ответ

0 голосов
/ 31 марта 2020

Оказывается, мне нужна поддержка сценариев :

def pytest_generate_tests(metafunc):
    idlist = []
    argvalues = []
    if hasattr(metafunc.cls, "scenarios"):
        for scenario in metafunc.cls.scenarios:
            idlist.append(scenario[0])
            items = scenario[1].items()
            argnames = [x[0] for x in items]
            argvalues.append([x[1] for x in items])
        metafunc.parametrize(argnames, argvalues, ids=idlist, scope="class")

scenario1 = ("scenario1": {"arg": "one"})
scenario2 = ("scenario2": {"arg": "one"})

class TestFoo:
    scenarios = [scenario1, scenario2]

    def test_a(self, arg):
        print("a", arg)

    def test_b(self, arg):
        print("b", arg)

Тогда результат - то, что я ожидаю.

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