【问题标题】:Pytest parametrize test using functionPytest使用函数参数化测试
【发布时间】:2019-12-09 23:02:16
【问题描述】:

我正在尝试使用产生参数值的函数对 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

【问题讨论】:

    标签: python pytest parametrized-testing


    【解决方案1】:

    您的函数provider() 产生一个参数。您必须遍历列表并产生每个项目。

    def provider():
        for param in [1, 2]:
            yield pytest.param(param)
    

    根据您的具体需求,您可以将其简化为:

    def provider():
        yield from [1, 2]
    

    甚至只是:

    def provider():
        return [1, 2]
    

    【讨论】:

    • 谢谢!你知道是否有任何方法可以将参数(即自定义夹具)传递给提供者方法?我的意思是在 pytest 装饰器方面
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 2023-01-20
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    相关资源
    最近更新 更多