用例参数化是什么
用例参数化把输入、环境与账号抽成参数:同一段测试逻辑覆盖多组数据,减少重复用例并集中管理测试数据。新增数据变成改一行表,而不是复制一个新用例;失败报告按参数组单独列出,哪组数据不过一目了然。
基本信息
| 核心做法 | 测试逻辑与数据分离,数据以表或文件提供 |
|---|---|
| 常见载体 | parametrize 装饰器、CSV 或 JSON 数据文件、数据工厂 |
| 命名要点 | 每组数据有可读标识,失败报告能直接定位 |
| 组合管理 | 数据组过多时按等价类筛选,只保留关键组合 |
| 适用层级 | 单元测试、接口测试与界面用例都适用 |
pytest 参数化
pytest 参数化
import pytest
@pytest.mark.parametrize('amount,expected', [
(1, True), # 正常小额
(99, True), # 上限内
(0, False), # 零值拒绝
(100, False), # 超余额
])
def test_withdraw(amount, expected):
assert can_withdraw(amount) is expected典型使用场景
- 边界与等价类:同一操作用多组边界数据批量验证。
- 多环境与账号:同一用例在不同环境、不同角色下重跑。
- 回归瘦身:删掉重复用例,用参数组合覆盖同样的数据面。
- 数据驱动接口测试:用表格维护请求与预期响应。
- 报告定位:每组数据独立成用例,失败列表精确到数据组。
- 数据集中维护:改一处数据源,全部相关用例同步生效。
参数组合要显式列出测试意图:给每组关键数据加注释或命名,评审更直观。
数据文件与用例同仓管理:数据变更随代码评审一起走,避免环境里手工改数据后与仓库脱节。
参数化的前提是逻辑一致:只有「步骤相同、数据不同」才适合合并,流程差异大的用例强行参数化会变得难读。
参数值会拼进用例名:大对象参数用 ids 指定短名字,报告更干净、定位更快。