我有这个测试班:
@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
我希望首先执行第一个参数的所有测试,然后才执行第二个参数的所有测试。
答案 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)
然后输出就是我所期望的。