首页 > 解决方案 > 参数化测试时如何通过夹具

问题描述

我正在尝试参数化我的测试。在返回列表的设置方法中,我调用了一个夹具(app_config)。

现在,我想调用设置,以便列表可以用作测试中的参数值。

我遇到的问题是在参数化装饰器中调用 setup 时我无法传递 app_config 固定装置。

def setup(app_config):
    member = app_config.membership
    output = app_config.plan_data
    ls = list(zip(member, output))
    return ls

@pytest.mark.parametrize('member, output', setup(app_config))
def test_concentric(app_config, member, output):
    ....
    ....

是否有一种优雅的方法可以在参数化装饰器中传递设置方法或任何其他方法来解决这个问题?

标签: pytest

解决方案


不幸的是,从 pytest 版本 4 开始,像常规函数一样调用固定装置变得不可能了。


在您的情况下,我建议您不要使用固定装置并切换到正常功能。例如,它可能看起来像这样:

import pytest


def app_config():
    membership = ['a', 'b', 'c']
    plan_data = [1, 2, 3]
    return {'membership': membership,
            'plan_data': plan_data}

def setup_func(config_func):
    data = config_func()
    member = data['membership']
    output = data['plan_data']
    ls = list(zip(member, output))
    return ls


@pytest.mark.parametrize('member, output', setup_func(app_config))
def test_concentric(member, output):
    print(member, output)
    ....

注意!避免使用setup()函数/夹具名称,因为它会与 pytest.runner 的内部冲突。


推荐阅读