繁体   English   中英

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM