Python Pytest-通过夹具进行标记。参数化

Python Pytest-通过夹具进行标记。参数化,python,pytest,fixtures,Python,Pytest,Fixtures,目标是对一组对象进行参数化,并对每个对象进一步对所有测试进行参数化(从1到N不等)。我的对象可能非常大,这就是我不想一次加载所有对象的原因。对于所有对象,测试数应等于测试中的键数,而不是对象数 目前,我正试图通过将一个fixture传递到mark.parametrize来生成一个要运行的测试列表。但这在pytest.mark.parametrize中不起作用,它将some_fixture视为一个函数,我得到以下错误: AttributeError:“函数”对象没有属性“元组列表” 示例代码:

目标是对一组对象进行参数化,并对每个对象进一步对所有测试进行参数化(从1到N不等)。我的对象可能非常大,这就是我不想一次加载所有对象的原因。对于所有对象,测试数应等于
测试中的键数
,而不是对象数

目前,我正试图通过将一个fixture传递到mark.parametrize来生成一个要运行的测试列表。但这在
pytest.mark.parametrize中不起作用,它将
some_fixture
视为一个函数,我得到以下错误:

AttributeError:“函数”对象没有属性“元组列表”

示例代码:

dict = {
    'obj1': {
        'tests': {'a1': 'b1', 'a2':'b2'}
    },
    'obj2': {
        'tests': {'a3':'b3', 'a4':'b4', 'a5':'b5'}
    }
}

class RandomClass():
    def __init__(self, name, dict):
        self._obj_name = name
        self._dict = dict

        self.list_of_tuples = None

    def create_list_of_tuples(self):
        self.list_of_tuples = []
        for item in self._dict[self._obj_name]['tests']:
            self.list_of_tuples.append((item, self._dict[self._obj_name]['tests'][item]))


@pytest.fixture(params=list(dict.keys())
def some_fixture(request, dict):
    obj = RandomClass(name = request.param, dict=dict)
    obj.create_list_of_tuples()
    return obj

@pytest.mark.parametrize("var1, var2", some_fixture.list_of_tuples, indirect=True)
def test_something(var1, var2):

   assert var1 == var2

非常感谢。

pytest不支持将夹具作为参数化的一部分,夹具是在收集所有测试后制作的

pytest不支持将夹具作为参数化的一部分,夹具是在收集所有测试后制作的

谢谢。您能推荐另一种测试模式来实现同样的效果吗?在这种情况下,我给出的典型建议是将参数化与活动对象稍微解耦,这样您就可以在调用ParameterizeAnks的早期使用您使用的对象来生成参数集。您能推荐另一种测试模式来实现同样的效果吗?在这种情况下,我给出的典型建议是将参数化与活动对象稍微解耦,这样您就可以在调用parameterize的早期使用您使用的对象来生成参数集