依赖调用超时,并不能说明写操作有没有发生。依赖可能已接收并提交该操作,只是调用方先停止等待;此时重试可能重复创建库存预留或支付。依赖故障测试要把这种未知状态及其业务副作用保留下来。

这个 Skill 检查什么

当团队需要评审服务、数据库、队列或外部提供方的故障分类、隔离、降级、兜底和恢复准备时,可以使用依赖故障测试 Skill。它不会注入故障、访问线上依赖,也不会声称恢复测试已经执行。

先梳理依赖契约

记录调用方与依赖、同步或异步交互方式、超时和重试规则、兜底行为,以及必须保持的业务和数据不变量。随后标出每条规则的来源,并识别缺失或过期的证据。

失败形态复核时需要回答的问题
无法连接或错误响应请求是否在产生副作用前被拒绝?有什么证据支持?
超时或慢响应调用方停止等待后,依赖是否可能仍接收或提交操作?
部分成功哪些记录、消息或下游调用可能已经改变?
异步延迟、重复或乱序pending 和确认分别代表什么?重放如何保证安全?
恢复如何核对积压、调用方状态和依赖状态,或执行补偿?

不要从超时或 HTTP 500 推断“没有提交”。应按请求或消息 ID 和时间线关联调用方记录、依赖结果、重试以及消息或数据库副作用。

示例:库存预留

假设同步库存请求发出后超时,调用方准备重试。设计复核要查明依赖是否收到第一次请求、操作是否使用幂等键、能查询到什么状态,以及如何发现或补偿重复预留。

契约可以区分已确认拒绝和结果未知。若结果未知,调用方应先对账,再重试非幂等写入。本例只说明设计检查方式,不代表真实提供方行为,也没有执行证据。

对于异步队列,要单独检查延迟投递、重复消息、顺序变化和确认丢失。消息仍在等待处理,不等于操作失败;确认成功也不自动证明所有业务副作用都已完成。

示例结果如何解读

以下是说明性结果,不代表某个提供方的实际行为。

观察到的材料有边界的解释下一步
调用方超时,依赖状态查询仍返回未知写入结果尚未确定,不能把超时当作拒绝用同一请求身份对账;非幂等写入确认状态前不要盲目重试
依赖的权威状态记录显示请求在副作用前被拒绝只支持该请求及该证据范围内的拒绝判断保留状态查询、请求 ID 和时间戳,再检查重试规则
同一业务意图对应多条预留记录存在重复副作用的迹象,但影响范围需按原始记录确认关联首次请求、重试和账本,交由负责人决定补偿或后续验证

建立可复核的发现

每条风险使用 DPF-## 编号,记录调用方与依赖、交互模式、故障触发、产生副作用的时间窗口、受影响的不变量、来源与证据状态、预期结果、优先级、负责人角色、关闭条件、验证方法和停止条件。场景必须区分同步拒绝、异步待处理和提交结果未知。

有效的验证建议应说明隔离环境、合成或脱敏数据、需要追踪的请求身份、预期的状态对账结果,以及何时停止演练。本设计复核本身不执行故障注入。

结论边界与相关 Skill

事实、基于证据的推断、候选建议和人工决策要分开写。没有来源支持的阈值与提供方行为应留待确认。重试测试: https://inaodeng.com/zh-cn/qaskills/retry-testing/;复核重试策略;恢复测试: https://inaodeng.com/zh-cn/qaskills/recovery-testing/;检查系统是否回到安全状态;熔断器测试: https://inaodeng.com/zh-cn/qaskills/circuit-breaker-testing/;聚焦熔断状态与探测流量。

安装与调用

安装这个独立 Skill:

npx skills add https://github.com/naodeng/awesome-qa-skills/tree/main/skills/zh --skill dependency-failure-testing

调用 dependency-failure-testing 时,提供依赖契约、调用方与依赖状态、交互方式、证据和业务不变量。可从下面的脱敏场景开始:

请用 dependency-failure-testing 复核这个依赖故障场景。
契约:[调用方、依赖、同步/异步模式、超时/重试/降级规则、业务不变量]
证据:[请求或消息 ID、调用方状态、依赖状态、重试、消息/数据库副作用]
范围:[环境、版本、纳入或排除的操作]
请区分已确认拒绝、异步待处理和提交结果未知,列出 DPF-## 候选发现、证据缺口及最小隔离验证步骤。不要把超时或 HTTP 500 当作未提交的证明,也不要声称本次已注入故障。

常见问题

调用方超时或收到 HTTP 500,能说明写入没有发生吗? 不能。按请求或消息 ID 对账依赖状态和已发生的副作用;结果未明时不要盲目重试非幂等写入。

Skill 会在真实依赖上注入故障吗? 不会。它复核已提供的材料并准备隔离验证方案;故障注入需要另行授权和安全测试环境。

源文件

使用前请阅读依赖故障测试 Prompt: https://github.com/naodeng/awesome-qa-skills/tree/main/skills/zh/testing-types/dependency-failure-testing/prompts/dependency-failure-testing.md。其中定义了 DPF-## 输出契约,以及故障模式×调用方/依赖/副作用矩阵。

分享