如何调整参数化pytest搭配repeat标记的执行顺序,实现按轮次重复执行用例
解决方案
你可以根据使用场景选择以下两种实现方式:
方案1:合并重复逻辑到参数化列表,无需额外配置
直接把重复轮次合并到参数化的数据源中,天然就能生成符合你要求的执行顺序,不需要修改其他配置:
import pytest # 基础测试参数 base_params = [('abc@abc.com','aaa'), ('def@def.com','ddd'), ('efg@efg.com','eee')] repeat_times = 2 # 拼接生成N轮全量参数列表,顺序为第一轮所有参数、第二轮所有参数 full_params = base_params * repeat_times @pytest.mark.parametrize("username, password", full_params) def test_your_case(username, password): # 测试逻辑代码 pass
方案2:保留原有标记写法,通过pytest钩子调整用例排序
如果你不想修改已有的@pytest.mark.repeat和参数化标记,可以在项目根目录的conftest.py文件中添加如下排序逻辑:
def pytest_collection_modifyitems(items): # 按参数化用例的参数ID分组 param_groups = {} for item in items: param_id = item.callspec.id if param_id not in param_groups: param_groups[param_id] = [] param_groups[param_id].append(item) # 按轮次重新排序用例 sorted_items = [] repeat_count = len(next(iter(param_groups.values()))) for round_idx in range(repeat_count): for group in param_groups.values(): sorted_items.append(group[round_idx]) items[:] = sorted_items
该方案会在pytest收集完所有测试用例后自动调整执行顺序,无需修改测试用例代码。
内容的提问来源于stack exchange,提问作者Saurabh
相关产品推荐
相关产品推荐

