测试不稳定与 CI 环境问题
🧪 记录 Flaky Test、执行顺序依赖、资源竞争以及本地与 CI 环境差异。
常见症状
- 单独运行通过,整套测试失败
- 本地稳定,CI 偶发超时
- 重试后通过但无法解释原因
- 并行执行失败,串行执行正常
- 截图或文本断言只在特定系统失败
高频根因
- 使用固定等待而非等待可观察条件
- 测试间共享数据、账号、端口或存储
- 未冻结时间、时区、语言和随机数
- 网络请求未隔离或 Mock 不完整
- 动画、字体、渲染差异导致视觉波动
- CPU / 内存紧张放大竞态与超时
排查策略
- 记录失败率、平台和最近变更
- 固定 seed,重复运行失败用例
- 改变并发度与执行顺序寻找共享状态
- 保存 trace、截图、视频、控制台和网络日志
- 对比 CI 镜像、浏览器、字体、时区和环境变量
Playwright 实践
- 使用 locator 自动等待,避免
waitForTimeout - 每个测试创建独立数据并在结束后清理
- 失败时保留 trace,优先查看动作与网络时间线
- 对外部服务使用可控 Mock 或契约测试
- 视觉测试固定 viewport、字体、动画和系统环境
修复原则
- 重试只用于收集证据,不作为最终修复
- 等待业务条件,而非增加任意超时时间
- 测试必须可独立、可重复、与顺序无关
- 隔离共享资源,必要时使用唯一命名空间
回归验证
- 目标用例连续运行 50 次通过
- 并行与随机顺序下均通过
- CI 冷启动环境已验证
- 失败产物足以定位问题
- 临时重试或隔离标记已移除