Pytest参数化fixture返回路径或读取数据:测试逻辑抽离方案咨询
pytest 测试用例逻辑拆分实现方案
实现思路
你可以直接新增两个fixture分别封装环境A、环境B的路径拼接与文件读取逻辑,pytest会自动将参数化变量、原有fixture注入到新增fixture中,无需调整现有参数化配置和原有env_a/env_b fixture。
步骤1:新增fixture
import pytest # 封装环境A侧路径拼接、文件读取逻辑 @pytest.fixture def item_list_a(env_a, platform_a, resource): path_a = env_a / platform_a / resource / "file.txt" return path_a.read() # 封装环境B侧路径拼接、文件读取逻辑 @pytest.fixture def item_list_b(env_b, platform_b, resource): path_b = env_b / platform_b / resource / "file.txt" return path_b.read()
步骤2:重构测试用例
@pytest.mark.parametrize('env_a, env_b', [(env_a, env_b)], indirect=True) # 原有配置无需修改 @pytest.mark.parametrize('platform_a, platform_b', [(platform_a, platform_b)]) @pytest.mark.parametrize('resource', [resource1, resource2, resource3, resource4]) def test_compare_items_lists(item_list_a, item_list_b): # 仅保留核心对比断言逻辑 extras_in_a = get_extras(item_list_a, item_list_b) extras_in_b = get_extras(item_list_b, item_list_a) assert not extras_in_a and not extras_in_b, f"存在差异:A侧多余项{extras_in_a},B侧多余项{extras_in_b}"
说明
- 原有
env_a、env_bfixture无需任何修改,新增fixture直接依赖即可调用 - 参数化声明的
platform_a、platform_b、resource变量可直接被fixture自动匹配注入,无需额外传参 - 所有数据准备逻辑收敛到fixture中,测试用例仅保留核心对比断言逻辑,符合职责单一的设计原则
- 后续如果文件路径规则、读取逻辑有变更,仅需修改对应fixture即可,无需批量调整测试用例
内容的提问来源于stack exchange,提问作者Piotrek Leśniak
相关产品推荐
相关产品推荐

