首页/开发/软件测试速查/异常路径用例设计(依赖失败)
用例设计方法62 条

异常路径用例设计(依赖失败)

对每个外部依赖设计失败路径:超时、拒绝、错误响应、半途中断;验证系统降级、重试与用户提示是否符合预期。

软件测试速查开发更新于 2026-10-13

故障路径是什么

故障路径用例针对「依赖出错、数据异常时系统怎么办」:上游超时、连接被拒、返回 5xx、响应变慢、部分成功、脏数据。每个外部依赖调用点都是故障注入点;用例要同时断言两个面——用户可感知行为(提示、降级内容)与系统状态(重试、熔断、数据一致性)。

基本信息

注入点数据库、缓存、消息队列、第三方接口、文件系统
故障类型超时、连接拒绝、5xx、慢响应、连接中断、畸形数据
系统应有表现重试上限、熔断降级、友好提示、不丢数据
工具测试替身(mock/stub)、代理中断、故障注入平台
断言双面界面表现加后端状态:订单状态、流水、队列
组合场景并发时故障:一个依赖慢导致线程池耗尽的连锁反应

注入示例

注入示例
from unittest.mock import patch

with patch("svc.pay.charge", side_effect=TimeoutError):  # 模拟支付超时
    resp = submit_order(order)

assert resp.code == "PAY_TIMEOUT"     # 有明确错误码
assert order.status == "待支付"        # 状态可重试,不丢单

典型使用场景

  • 支付、下单关键链路:依赖不稳是常态,容错必须可验证
  • 第三方对接:对方超时与限流下的自身表现
  • 重试与幂等:模拟重复回调与重复提交
  • 熔断降级验证:依赖连续失败后是否进入短路状态
  • 数据修复:脏数据与缺失数据导入后的系统行为

故障类型与期望行为

故障期望行为核对点
超时重试有限次后明确失败不无限挂起,状态可恢复
连接拒绝快速失败加告警不长时间阻塞线程
5xx熔断或降级降级内容对用户可见
慢响应超时保护生效不拖垮线程池
畸形数据校验拦截不落库,不污染存量
故障用例必须含「恢复后」的验证:熔断要能自动恢复、重试成功后的数据要最终一致,只看失败瞬间是不够的。
生产环境注入故障走混沌工程流程:控制爆炸半径、有随时终止的手段、通知相关方,别拿线上当试验田。
替身故障要和真实故障形状一致:真实故障往往是连接中断或超时,不是抛一个干净的异常,替身太理想会漏掉处理缺陷。

易错点

  • 只测「依赖挂了有提示」:数据一致性没人验,出现半扣款、丢单无人知晓
  • 忘记测恢复路径:熔断不恢复、重试卡在半途,故障结束了系统还没回来
  • 幂等没测:重试造成重复扣款、重复发货,代价最大的那类缺陷
  • 替身故障与真实行为不一致:mock 里是异常,线上是挂起或断连,处理逻辑完全不同

数据来源与参考

  • Google SRE Book(故障演练相关章节)
  • WireMock 官方文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌