Pytest参数化测试使用函数
Pytest parametrize test using function
我正在尝试使用生成参数值的函数对 pytest 测试进行参数化。我希望它 运行 分别测试每个值。这是示例代码:
def provider():
yield pytest.param([1, 2])
class Test:
@pytest.mark.parametrize("a", provider())
def test(self, a, logger):
logger.info("a: {}".format(a))
@pytest.mark.parametrize("a", [1, 2])
def test_2(self, a, logger):
logger.info("a: {}".format(a))
是否可以使用提供程序函数对测试进行参数化,使其像 test_2 一样工作。
以下是我的上述测试日志:
2019-12-09 14:39:36 test[a0] start
a: [1, 2]
2019-12-09 14:39:36 test[a0] passed
2019-12-09 14:39:36 test_2[1] start
a: 1
2019-12-09 14:39:36 test_2[1] passed
2019-12-09 14:39:36 test_2[2] start
a: 2
2019-12-09 14:39:36 test_2[2] passed
您的函数 provider()
产生一个参数。您必须遍历列表并生成每个项目。
def provider():
for param in [1, 2]:
yield pytest.param(param)
根据您的具体需求,您可以将其简化为:
def provider():
yield from [1, 2]
甚至只是:
def provider():
return [1, 2]
我正在尝试使用生成参数值的函数对 pytest 测试进行参数化。我希望它 运行 分别测试每个值。这是示例代码:
def provider():
yield pytest.param([1, 2])
class Test:
@pytest.mark.parametrize("a", provider())
def test(self, a, logger):
logger.info("a: {}".format(a))
@pytest.mark.parametrize("a", [1, 2])
def test_2(self, a, logger):
logger.info("a: {}".format(a))
是否可以使用提供程序函数对测试进行参数化,使其像 test_2 一样工作。
以下是我的上述测试日志:
2019-12-09 14:39:36 test[a0] start
a: [1, 2]
2019-12-09 14:39:36 test[a0] passed
2019-12-09 14:39:36 test_2[1] start
a: 1
2019-12-09 14:39:36 test_2[1] passed
2019-12-09 14:39:36 test_2[2] start
a: 2
2019-12-09 14:39:36 test_2[2] passed
您的函数 provider()
产生一个参数。您必须遍历列表并生成每个项目。
def provider():
for param in [1, 2]:
yield pytest.param(param)
根据您的具体需求,您可以将其简化为:
def provider():
yield from [1, 2]
甚至只是:
def provider():
return [1, 2]