如何在pytest类中对参数化测试进行分组/排序

时间:2020-03-31 14:38:45

标签: python pytest

我有这个测试班:

@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 :(得分:0)

原来我需要scenario support

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)

然后输出就是我所期望的。