微风测试修复
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/breeze-fix 技能。
技能介绍
要解决什么问题
Playwright 测试在本地全绿,一进 CI 就红,或者同一用例时而通过时而失败——这类问题通常被笼统地称作 flaky test,但真正的原因可能完全不同:也许是 waitForTimeout() 造成的时序竞态,也许是测试之间共享了可变状态,也可能是 CI 与本地的视口尺寸、字体渲染或时区不一致。凭经验反复加随机等待,只会让问题更难定位。
技能如何工作
这个技能把「修复失败测试」变成一个可重复的流程,核心是先分类、再动手:
- 复现失败:先运行目标测试(如
e2e/login.spec.ts中的"should redirect after login"),若直接通过,则用--repeat-each=20做 burn-in,必要时再以多 worker 并行运行,确认是否 flaky。 - 采集证据:开启完整 trace 并读取输出,可用
/debug分析 trace 文件,对比本地与 CI 的截图和轨迹。 - 归类根因:技能内置的
flaky-taxonomy.md将失败分为四类——Timing/Async(各处偶发,--repeat-each=20可复现)、Test Isolation(套件中失败、单独运行通过)、Environment(CI 失败本地通过)与 Infrastructure(无规律且报错指向浏览器内部)。 - 定向修复:每类给出对应的修法。时序问题改用 web-first 断言(如
toBeVisible());隔离问题清除共享状态、每个测试生成独立数据;环境问题对齐视口、字体与时区,甚至用 Docker 在本地复现 CI;基础设施问题则调整超时、配置retries: 2或降低并行度以规避浏览器 OOM。 - 验证与预防:修复后连跑 10 次,全部通过才算完成;随后建议在 CI 中启用重试、
trace: 'on-first-retry',并把修法沉淀进项目测试规范文档。
适用边界与注意点
它只针对 Playwright 端到端测试,不覆盖单元测试或组件测试框架;分类依赖 flaky-taxonomy.md,遇到四类之外的失败模式(例如被测应用自身的真实回归)时仍需人工介入。另外,重试只是兜底,根因修复才是目标,不要把它当成长期策略。
使用场景
- CI 中 e2e 登录用例偶发失败,需要在合并前定位是时序还是环境问题
- 本地全绿但 CI 红,需对比本地与 CI 的截图和 trace 找出差异
- 测试套件整体跑才失败,单独跑却通过,要清除共享状态并生成独立数据
- CI 偶发超时或浏览器 OOM,需要调整超时与并行度并配置重试
适合人员
- 编写 Playwright 端到端测试的前端工程师,需要稳定 CI 流水线中的 e2e 用例
- 维护测试基建的 QA 工程师,需要系统化定位 flaky 测试根因
- 负责 CI 配置的 DevOps 工程师,需要减少由浏览器 OOM 或超时引起的随机失败
- 带领团队沉淀测试规范的技术负责人,需要把修复模式写进测试约定文档