pytest中如何用同一测试用例调用多个依赖参数化fixture的fixture?
问题解决方法
错误原因
Type_HC_Passive/Type_HC_Active 依赖带参数的 hc_tags fixture,但测试用例 test_Type_HCBase 未消费 hc_tags 的参数,导致pytest无法为依赖链中的 hc_tags 分配参数值,从而抛出报错。
方案一:修改测试用例依赖
让测试用例直接依赖 hc_tags,pytest会自动处理 hc_tags 的参数化,结合 Type_HCBase_Fx 的参数生成正确的测试实例:
@pytest.fixture(name="hc_tags", params=[("Label", TR.LabelMixin)]) def _hc_tags(request): return request.param @pytest.fixture def Type_HC_Passive(hc_tags): # 保留原有fixture逻辑 return PassiveObj @pytest.fixture def Type_HC_Active(hc_tags): # 保留原有fixture逻辑 return ActiveObj @pytest.mark.parametrize("Type_HCBase_Fx", ['Type_HC_Passive', 'Type_HC_Active'] ) def test_Type_HCBase(Type_HCBase_Fx, request, hc_tags): Type_HCBase = request.getfixturevalue(Type_HCBase_Fx) # 执行测试断言 <do-some-test-asserts>
方案二:合并fixture简化结构
将两个Type_HC fixture合并为一个带参数的fixture,避免动态获取fixture的操作,结构更简洁:
@pytest.fixture(name="hc_tags", params=[("Label", TR.LabelMixin)]) def _hc_tags(request): return request.param @pytest.fixture(params=['passive', 'active']) def Type_HCBase(request, hc_tags): label, mixin = hc_tags if request.param == 'passive': # 原Type_HC_Passive的逻辑 return PassiveObj else: # 原Type_HC_Active的逻辑 return ActiveObj def test_Type_HCBase(Type_HCBase): # 执行测试断言 <do-some-test-asserts>
内容的提问来源于stack exchange,提问作者Kabira K
相关产品推荐
相关产品推荐

