# 数据驱动与参数矩阵方法（data-driven）

> API、导入类、数据转换类功能的用例设计方法（何时选它见 `../testing-principles.md` 第 2 节）。

## 1. API 参数矩阵

每个接口一张参数表，逐参数 × 逐属性配用例：

```text
参数属性：必填/选填、类型、长度、取值范围、默认值、枚举值、组合约束
逐格产出：正常值（每属性至少一个）/ 缺失（必填报错）/ 类型错误 / 边界值（见 boundary.md）
```

- 响应侧：成功结构、每个错误码的触发条件与响应体、鉴权失败 / 越权 / 限流的表现
- 幂等：重复提交同一请求（相同业务键）→ 结果不变、不重复创建
- 并发：同一资源的并发写 → 无中间态、无互相覆盖
- 参数依据来自 API 文档或代码的校验逻辑（`文件:行` 落附录）；文档与代码不一致记文档偏离

## 2. 多参数组合降档策略（跨参数交互的正解）

单参数逐属性验证（必填/类型/边界）是正交的、必须做全；组合测试的对象是**跨参数交互**——跨字段业务规则与参数依赖。组合数随参数个数与取值数**指数增长**，必须显式选档，不静默收缩：

```text
全组合数 = ∏(各参数取值个数)

档位        适用条件                        覆盖语义
全组合      全组合数 ≤ 20 且挂 Critical 风险   每个取值组合一条用例
成对组合    默认档（全组合数 > 20）           任意两参数的取值对至少出现一次
风险挑选    成对仍不可行（参数面过大/预算受限）  按 risk_ref 挑参数 × 边界值组合
```

- **成对组合（pairwise）依据**：NIST 实证研究（Kuhn et al. 2004）——多数参数交互类缺陷（约 70% 以上）可被两两取值组合捕获，成本从指数级降为近线性
- **已知业务规则优先于机械组合**：跨字段规则（"使用门槛不能低于面额"类）是显式约束——在**合法取值集**上做组合；违反规则的格子改取合法值或拆为显式负向用例，不做隐式非法组合
- **三路交互手动补**：成对组合不保证三个参数同时取特定值的组合——挂 Critical 风险的三路交互（如"金额 × 门槛 × 状态"共同决定资损路径）逐条识别、手动补齐
- **降档留痕**：降到哪档、依据（组合数 / 风险 / 预算）、被排除的组合面写进 rationale——供 `test-case-review` 追问，不静默降档

## 3. 导入类功能

- **格式**：标准格式成功 / 字段缺失 / 类型非法 / 编码问题（GBK/UTF-8）/ 分隔符变体
- **行级处理**：全部有效 / 部分无效（行级报错还是整批失败？依据文档或实现）/ 全部无效
- **重复导入**：同一文件导入两次 → 幂等行为（跳过 / 更新 / 报错，按声明的规则断言）
- **大数据量**：上限条数 / 超限表现 / 异步导入的状态可追踪与失败恢复

## 4. 数据转换（Input → Transform → Output）

- 每类典型输入一条转换用例，断言输出逐字段正确
- **读回一致**：写入后读回，值与写入一致（保真）
- 畸形输入：空输入 / 部分字段 / 未知枚举值的兜底行为
- 转换规则变更后，存量已转换数据是否需要重算（一致性用例）

## 5. test_data 具体化要求

- 数据驱动不等于占位符：每条用例的输入数据**必须具体**（真实编号、真实字段值），整批数据在导读区「标准测试数据」或附录集中声明
- 需要预置的数据（库里的存量记录）在前置条件写明来源：谁造 / 哪个脚本 / 哪个接口
- 多套数据之间的差异点在用例名或前置里点明（"高门槛券" vs "低门槛券"），执行者不需要自己推断
