如何在pytest中使用存在依赖关系的参数实现多数据集多角度测试
pytest带依赖关系多参数测试的实现方案
核心思路
通过在conftest.py中定义数据集与对应角度的绑定参数组合,结合pytest的fixture特性,将参数依赖关系封装成可复用的测试资源,让测试用例直接调用即可完成多场景覆盖。
具体实现步骤
1. 在conftest.py中配置参数与加载逻辑
把数据集和对应角度的映射、DataFrame加载逻辑都放在conftest.py里,实现全局复用:
import pytest import pandas as pd def load_df_from_csv(csv_path): # 替换为你实际的DataFrame加载逻辑 return pd.read_csv(csv_path) # 定义绑定好的数据集-角度测试组合 TEST_COMBINATIONS = [ ("data_set1.csv", 0), ("data_set1.csv", 30), ("data_set1.csv", 60), ("data_set2.csv", 90), ("data_set2.csv", 120), ("data_set2.csv", 150), ("data_set3.csv", 180), ("data_set3.csv", 210), ("data_set3.csv", 240), ] @pytest.fixture(params=TEST_COMBINATIONS) def df_angle_pair(request): csv_path, angle = request.param # 加载对应数据集的DataFrame df = load_df_from_csv(csv_path) return df, angle
2. 编写极简测试用例
在你的测试文件中,直接使用上述fixture,无需再处理参数组合逻辑:
from mylibrary import do_some_calculation def test_df_against_angle(df_angle_pair): df, angle = df_angle_pair result = do_some_calculation(df, angle) assert result
3. 优化测试标识(可选)
如果需要在pytest运行输出中更清晰地看到每个测试场景的信息,可以给参数组合加上自定义ID:
TEST_COMBINATIONS = [ pytest.param("data_set1.csv", 0, id="data_set1-angle_0"), pytest.param("data_set1.csv", 30, id="data_set1-angle_30"), pytest.param("data_set1.csv", 60, id="data_set1-angle_60"), pytest.param("data_set2.csv", 90, id="data_set2-angle_90"), pytest.param("data_set2.csv", 120, id="data_set2-angle_120"), pytest.param("data_set2.csv", 150, id="data_set2-angle_150"), pytest.param("data_set3.csv", 180, id="data_set3-angle_180"), pytest.param("data_set3.csv", 210, id="data_set3-angle_210"), pytest.param("data_set3.csv", 240, id="data_set3-angle_240"), ]
这样运行测试时,每个用例的名称会显示对应的ID,方便快速定位失败场景。
4. 性能优化(可选)
如果DataFrame加载耗时较长,可以给fixture添加scope参数,让同一个CSV的DataFrame只加载一次:
@pytest.fixture(params=TEST_COMBINATIONS, scope="module") def df_angle_pair(request): # 原有逻辑不变 csv_path, angle = request.param df = load_df_from_csv(csv_path) return df, angle
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

