分布式系统的失效模式远超单机(网络延迟与分区、时钟漂移、节点崩溃、消息乱序重复),测试必须分层叠加:
- 单元与组件测试:逻辑正确性的基础,用 fake/stub 隔离外部依赖。
- 契约测试:如 Pact,保证服务间接口兼容,替代脆弱的端到端大集成。
- 集成与端到端:用容器化环境(Testcontainers)跑真实中间件,验证主链路。
- 故障注入 / 混沌工程:主动制造网络延迟、丢包、杀进程(Chaos Monkey 类工具),验证超时、重试、熔断、降级是否按设计工作。
- 属性测试与模型检验:对并发与协议,用 property-based testing 生成交错序列;核心一致性协议可用 TLA+ 做形式化验证;Jepsen 式线性一致性检查是业界标杆。
- 非功能验证:压测、长稳测试(soak test)暴露资源泄漏与队列积压;用影子流量/金丝雀在生产旁路验证。
- 可观测性即测试:分布式追踪、指标告警,让“没测到”的问题在线上可发现、可定位。
易错点:重试风暴与幂等性必须在故障场景下验证;本地永远模拟不全生产拓扑,测试金字塔之外要接受“在生产中测试”(灰度、特性开关)。