← 返回文档首页

异常测试用例清单与结果

2026-07-21 · 只打 id-test 测试环境 · 配套脚本 .ai-workbench/chaos-test.sh
异常测试的目标不是"看服务会不会挂",而是"挂的方式对不对"——每一个已经埋下的防护,都主动制造一次它该防的故障,验证它真的兜住了:该降级的降级、该快速失败的快速失败、该报警的报警,而不是整个服务连坐。本页给出可执行的用例清单,标注哪些已用脚本自动验证通过、哪些需要人工/协调注入。

1. 测试纪律(先立规矩,免得误伤)

2. 已自动验证的用例(2026-07-21 全部 PASS)

bash .ai-workbench/chaos-test.sh 一键复现;下面是本次执行的真实结果。

用例注入方式预期表现方式结果
伪造 access token构造一个假签名 token 请求受保护接口干净 401,不 500、不泄漏堆栈自动PASS
垃圾 tokenAuthorization 带一段乱字符串401自动PASS
篡改 token payload改 payload 里的 sub 但不改签名签名校验失败 → 401自动PASS
限流豁免:健康检查/actuator/health 连打 30 次始终 200,不被限流误伤自动PASS
限流豁免:webhooks猛打 /webhooks/**不返回 429(三方回调不能被限流挡掉)自动PASS
设备层限流固定一个设备 ID 1 分钟猛打到设备阈值(测试 60/分钟)开始 429自动PASS
伪造设备绕过限流每个请求换一个假设备 ID 猛打设备层限不住,但 IP 总闸兜住自动PASS
另有两条已在功能上线时人工实测通过、可随时复现:①单设备登录——A、B 两台设备登录同一账号,A 的旧 token 立刻 SESSION_REPLACED、旧 refresh token 续期被拒、B 正常;②三方超时——已确认部署包内 spring.http.client.read-timeout=10s 生效(用户侧接口),Xendit/报表类单独 30s。

3. 待人工/协调注入的用例(按优先级)

这些需要故障注入工具或在服务器上操作,不适合放进对公网打的脚本,列成清单逐条执行、打勾。

类别用例注入方式预期表现状态
三方依赖三方变慢用代理/防火墙把 Shopee/TikTok/Lazada 接口拖慢到 >15s转链接/查详情 10s 快速失败;登录、查钱包、首页等无关接口不受影响、不变慢待执行
三方挂掉把三方地址解析到黑洞/拒绝连接对应接口报错,不重试到死、不占死线程待执行
三方返垃圾代理返回截断 JSON / 超大响应解析失败被捕获,不写脏数据、不抛未处理异常待执行
认证/单设备Redis 抖动时登录临时切断到 Redis 的连接后登录单设备检查 fail-open 放行,用户仍能正常用,不集体登录失败待执行
限流器依赖故障制造限流内部异常fail-open 放行,不因限流器坏了把用户全拦住待执行
基础设施杀进程手动 kill 某个服务进程自愈看门狗(self-heal)几分钟内自动拉起并报警飞书待执行
DB/Redis 短暂断连安全组临时封端口再恢复连接池重连,请求短暂失败后自动恢复,无需重启待执行
资源打高压 CPU/内存/磁盘CloudMonitor 按阈值告警飞书待执行
数据/并发
(资金只读观察)
重复回调/重复同步同一支付回调、同一订单同步发两次幂等键/唯一约束天然去重,不重复入账待执行
并发抢同一钱包同一用户钱包并发操作行锁保证不算错钱待执行
消息乱序/重复往 outbox 灌重复/乱序事件消费者幂等,结果不变待执行

4. 建议推进节奏

  1. 已完成:认证异常 + 限流两层 + 豁免路径 + 单设备 + 三方超时配置(第 2 节,脚本一键复现)。
  2. 下一步(风险低、见效快):三方依赖类(变慢/挂掉/垃圾数据)——直接验证刚补的超时,需要一个能拦截出站请求的代理。
  3. 再下一步(需协调):基础设施类(杀进程验自愈、断连验重连、压资源验告警)。
  4. 最后(且只读):数据/并发/资金类——只观察幂等和行锁是否兜住,不主动制造资金破坏。