E2E测试去抖技能Skill dyad:deflake-e2e

这个技能用于识别和修复端到端测试中的不稳定性问题,通过多次运行测试、分析失败日志并应用最佳实践来优化测试可靠性。关键词:E2E测试、测试稳定性、Playwright、测试自动化、去抖。

测试 0 次安装 0 次浏览 更新于 3/15/2026

name: dyad:deflake-e2e description: 通过反复运行和调查失败来识别和修复不稳定的端到端测试。

修复不稳定的E2E测试

通过反复运行和调查失败来识别和修复不稳定的端到端测试。

参数

  • $ARGUMENTS: (可选) 特定的E2E测试文件以修复不稳定(例如,main.spec.tse2e-tests/main.spec.ts)。如果未提供,将提示修复整个测试套件。

指令

  1. 检查是否提供了特定测试:

    如果 $ARGUMENTS 为空或未提供,询问用户:

    “未提供特定测试。您想修复整个E2E测试套件吗?这可能需要很长时间,因为每个测试将运行10次。”

    等待用户确认后再继续。如果他们拒绝,请他们提供特定的测试文件。

  2. 安装依赖项:

    npm install
    
  3. 构建应用二进制文件:

    npm run build
    

    重要: 在运行E2E测试之前,此步骤是必需的。E2E测试针对构建的二进制文件运行。如果您对应用代码(e2e-tests/ 外的任何内容)进行了任何更改,必须在再次运行E2E测试前重新运行 npm run build,否则您将测试旧版本。

  4. 重复运行测试以检测不稳定性:

    对每个测试文件,运行10次:

    PLAYWRIGHT_RETRIES=0 PLAYWRIGHT_HTML_OPEN=never npm run e2e -- e2e-tests/<testfile>.spec.ts --repeat-each=10
    

    重要: PLAYWRIGHT_RETRIES=0 是必需的,以禁用自动重试。否则,在CI环境(其中 CI=true)中默认有2次重试,导致不稳定测试在重试时通过并被错误地跳过为“非不稳定”。

    注意:

    • 如果 $ARGUMENTS 提供时没有 e2e-tests/ 前缀,添加它
    • 如果 $ARGUMENTS 提供时没有 .spec.ts 后缀,添加它
    • 如果一个测试在10次运行中至少失败一次,则被视为不稳定
  5. 对于每个不稳定测试,使用调试日志进行调查:

    使用Playwright浏览器调试运行失败测试:

    DEBUG=pw:browser PLAYWRIGHT_RETRIES=0 PLAYWRIGHT_HTML_OPEN=never npm run e2e -- e2e-tests/<testfile>.spec.ts
    

    分析调试输出以理解:

    • 时序问题(竞态条件、元素未就绪)
    • 动画/过渡干扰
    • 网络时序变异性
    • 测试间状态泄漏
    • 快照比较差异
  6. 修复不稳定测试:

    遵循Playwright最佳实践的常见修复:

    • 在与元素交互之前使用 await expect(locator).toBeVisible()
    • 对于网络相关测试,使用 await page.waitForLoadState('networkidle')
    • 使用稳定选择器(data-testid、role、text)而不是易碎的CSS选择器
    • 为动画添加显式等待:await page.waitForTimeout(300)(谨慎使用)
    • 对于视觉测试,使用 await expect(locator).toHaveScreenshot() 选项,如 maxDiffPixelRatio
    • 确保适当的测试隔离(测试前/后清理状态)

    重要: 不要更改任何应用代码。假设应用代码是正确的。仅修改测试文件和快照基线。

  7. 如果需要,更新快照基线:

    如果不稳定性是由于合法的视觉差异:

    PLAYWRIGHT_RETRIES=0 PLAYWRIGHT_HTML_OPEN=never npm run e2e -- e2e-tests/<testfile>.spec.ts --update-snapshots
    
  8. 验证修复:

    重新运行测试10次以确认不再不稳定:

    PLAYWRIGHT_RETRIES=0 PLAYWRIGHT_HTML_OPEN=never npm run e2e -- e2e-tests/<testfile>.spec.ts --repeat-each=10
    

    测试应在所有10次运行中一致通过。

  9. 总结结果:

    向用户报告:

    • 哪些测试被识别为不稳定
    • 导致不稳定性的原因
    • 应用了哪些修复
    • 验证结果(所有10次运行通过)
    • 任何无法修复且需要进一步调查的测试