如何在pytest中为单份测试用例关联多个marker标记,避免冗余代码?
解决方案
分两种常见使用场景提供原生pytest实现方案,无需引入额外依赖:
场景1:单测试用例需被多个标记筛选,无需重复执行
直接叠加多个标记装饰器即可,无任何冗余代码:
@pytest.mark.A @pytest.mark.B def test_common(): # 测试业务代码 ...
运行pytest -m A或者pytest -m B都会命中该测试,且仅执行一次。
场景2:同一份测试逻辑需生成两个独立测试用例,分别关联不同标记、执行两次
方案1:公共逻辑抽离+薄包装函数
将测试核心逻辑抽为公共函数,仅对不同包装函数加标记,无重复业务代码,可读性最高:
def _test_common_logic(): # 测试业务代码 ... @pytest.mark.A def test_scenario_a(): _test_common_logic() @pytest.mark.B def test_scenario_b(): _test_common_logic()
你可以自定义两个测试函数的名称,方便测试结果统计和问题定位。
方案2:优化参数化写法,消除冗余参数警告
如果不想额外写包装函数,可以优化参数化写法,用*_接收忽略参数,同时省略pytest.param的冗余值:
@pytest.mark.parametrize("_", [ pytest.param(marks=pytest.mark.A), pytest.param(marks=pytest.mark.B), ], ids=["mark_A", "mark_B"]) def test(*_): # 测试业务代码 ...
ids参数可以自定义测试用例的后缀标识,运行后会生成test[mark_A]、test[mark_B]两个独立测试项,分别携带对应标记。
内容的提问来源于stack exchange,提问作者user554319
相关产品推荐
相关产品推荐

