跳到主要内容

测试不稳定与 CI 环境问题

🧪 记录 Flaky Test、执行顺序依赖、资源竞争以及本地与 CI 环境差异。

常见症状

  • 单独运行通过,整套测试失败
  • 本地稳定,CI 偶发超时
  • 重试后通过但无法解释原因
  • 并行执行失败,串行执行正常
  • 截图或文本断言只在特定系统失败

高频根因

  • 使用固定等待而非等待可观察条件
  • 测试间共享数据、账号、端口或存储
  • 未冻结时间、时区、语言和随机数
  • 网络请求未隔离或 Mock 不完整
  • 动画、字体、渲染差异导致视觉波动
  • CPU / 内存紧张放大竞态与超时

排查策略

  1. 记录失败率、平台和最近变更
  2. 固定 seed,重复运行失败用例
  3. 改变并发度与执行顺序寻找共享状态
  4. 保存 trace、截图、视频、控制台和网络日志
  5. 对比 CI 镜像、浏览器、字体、时区和环境变量

Playwright 实践

  • 使用 locator 自动等待,避免 waitForTimeout
  • 每个测试创建独立数据并在结束后清理
  • 失败时保留 trace,优先查看动作与网络时间线
  • 对外部服务使用可控 Mock 或契约测试
  • 视觉测试固定 viewport、字体、动画和系统环境

修复原则

  • 重试只用于收集证据,不作为最终修复
  • 等待业务条件,而非增加任意超时时间
  • 测试必须可独立、可重复、与顺序无关
  • 隔离共享资源,必要时使用唯一命名空间

回归验证

  • 目标用例连续运行 50 次通过
  • 并行与随机顺序下均通过
  • CI 冷启动环境已验证
  • 失败产物足以定位问题
  • 临时重试或隔离标记已移除