我使用pytest进行单元测试,我想对测试进行参数化。我知道我可以在类级别和方法级别使用@pytest.mark.parametrize。
@pytest.mark.parametrize("param1", [1,2,3,4,5])
class TestXYZ:
@pytest.mark.parametrize("param2", [6,7,8,9])
def test_xyz(self, param1, param2):
assert param1 == param2
然而,在我的情况下,碰巧param2列表取决于实际的param1值。我想获得这样的东西:
@pytest.mark.parametrize("param1", [1,2,3,4,5])
class TestXYZ:
@pytest.mark.parametrize("param2", getparams(param1))
def test_xyz(self, param1, param2):
assert param1 == param2
然而,我不知道该怎么做
我试着使用嵌套函数,但也没有成功:
@pytest.mark.parametrize("param1", [1,2,3,4,5])
class TestXYZ:
def test_gen(self, param1):
@pytest.mark.parametrize("param2", [6,7,8,9])
def test_xyz(self, param1, param2):
assert param1 == param2
return test_gen
Pytest然后只为param1收集一个测试用例。
这应该适用于您:
import pytest
parameter1 = [1, 2, 3]
@pytest.mark.parametrize("param1", parameter1)
class TestXYZ:
@pytest.mark.parametrize("param2", [4, 3, parameter1[0]])
def test_xyz(self, param1, param2):
assert param1 == param2
输出:本例为7 failed, 2 passed
。