Python 使用参数化时出现pytest错误&;xfail

Python 使用参数化时出现pytest错误&;xfail,python,pytest,Python,Pytest,我正在使用pytest进行自动化测试 我正在尝试对xfail使用参数化。 选项1起作用-元组直接写入列表中 选项2失败:错误:必须等于值的数目(1):(正在尝试生成列表ComperExtension) 选项2示例:失败(这是我需要在代码中使用的选项) 注意,在数据驱动的元组列表中,一切都正常,并且具有正确的元组 def build_dd(): with open('xxx/dd_ee.json') as dd_file: dd_json = json.load(dd_fi

我正在使用pytest进行自动化测试 我正在尝试对xfail使用参数化。 选项1起作用-元组直接写入列表中 选项2失败:错误:必须等于值的数目(1):(正在尝试生成列表ComperExtension)

选项2示例:失败(这是我需要在代码中使用的选项) 注意,在数据驱动的元组列表中,一切都正常,并且具有正确的元组

def build_dd():
    with open('xxx/dd_ee.json') as dd_file:
        dd_json = json.load(dd_file)
    data_driven = [tuple(scenario.values()) for scenario in dd_json['scenarios']]
    z=[pytest.param(new_tuple_with_xfail, marks=pytest.mark.xfail) for new_tuple_with_xfail in 
    data_driven ]
    return z


@pytest.mark.parametrize("val1,va2", build_dd(),)
def test_eval(val1, val2):
    assert val1 != val2
    print(11)
通过的选项1:

def build_dd():
    
    x = [pytest.param(1,2, marks=pytest.mark.xfail)]
    return x


@pytest.mark.parametrize(
    "val1,va2", build_dd(),)
def test_eval(val1, val2):
    assert val1 != val2
    print(11)
在截图中我可以清楚地看到x和y之间的区别 请各位指教,,
谢谢

问题在于,
pytest.param
需要为每个参数提供一个位置参数,但您只为它提供了一个元组参数。解决方案是使用
*args
语法解包元组。换句话说,
z
需要这样定义:

z = [
    pytest.param(*new_tuple_with_xfail, marks=pytest.mark.xfail)
    for new_tuple_with_xfail in data_driven
]

您可能还会发现该包很有用。它处理从JSON文件加载测试用例的任务,并内置支持向特定测试用例添加标记。

检查并更新,提前感谢!