参数化测试时如何通过夹具

时间:2019-08-08 02:24:58

标签: pytest

我正在尝试对测试进行参数化。 在返回列表的设置方法中,我正在调用固定装置(app_config)。

现在,我想调用安装程序,以便该列表可以用作测试内的参数值。

我遇到的问题是,在参数装饰器中调用安装程序时,我无法通过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):
    ....
    ....

是否有一种优雅的方法可以在参数装饰器中传递设置方法,或者通过其他任何方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

不幸的是,从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)
    ....

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