幂等键测试是什么
幂等键(Idempotency-Key 头或业务去重键)让重试安全:同一键的重复请求应返回首次结果或明确冲突,并发下仅生效一次;这是支付、订单与回调类接口的测试重点。幂等键还要明确有效期与去重存储策略,否则「重试安全」只是错觉。
基本信息
| 传递方式 | HTTP 头(如 Idempotency-Key)或业务字段 |
|---|---|
| 行为约定 | 重复请求返回首次结果或明确冲突错误 |
| 并发语义 | 同一键并发提交仅一次生效 |
| 有效期 | 去重记录保留窗口,超窗后的重试视为新请求 |
| 存储策略 | 去重表或缓存加唯一索引,防止键碰撞覆盖 |
重复提交示意
重复提交示意
curl -sS -X POST https://api.example.com/v1/payments \
-H 'Idempotency-Key: 7f9c2ba4e88f827d616045507605853e' \
-H 'Content-Type: application/json' \
-d '{"amount": 100}'
# 使用同一键重发,应得到与首次一致的结果典型使用场景
- 支付下单:客户端超时重试不产生第二笔单据。
- 回调处理:网关重复通知只入账一次。
- 并发验证:同时发两个相同键请求,验证仅一次生效。
- 窗口边界:有效期两侧行为(命中与未命中)分别断言。
- 错误冲突:相同键不同参数应返回明确错误。
- 审计对账:按键统计请求次数与生效次数。
测试矩阵
| 场景 | 输入 | 预期 |
|---|---|---|
| 顺序重放 | 同键请求两次 | 仅一次生效 |
| 并发双发 | 同键同时提交 | 仅一次生效 |
| 键过期后 | 超窗重试 | 视为新请求 |
| 同键异体 | 相同键不同参数 | 明确冲突错误 |
幂等键需要明确有效期与去重存储策略;测试覆盖重复提交、并发双发与键过期后的行为。
响应要可区分:重复命中时返回首次结果或标注重复,客户端才敢自动重试。
键由客户端生成时要校验格式与长度:随意生成的键会让碰撞与覆盖问题难以复现。