SuperAPI AI 工具集

migrate-to-e2e

测试与质量

查看项目

更新于 11-11 16:23

技能介绍

用途

migrate-to-e2e 用于把已有的端到端测试套件迁移到 e2e。它不会一次性重写全部测试,而是每次会话迁移一个切片,证明该切片通过,并让旧测试运行器保留原有测试、新 e2e 测试在旁边通过。进度文件 MIGRATION.md 记录已迁移、剩余和原因,让下一次会话(无论是你还是另一个智能体)从已有进度开始,而不是从头再来。旧测试何时移除由用户决定。

主要能力

  • 支持从多种源运行器迁移:Playwright、Cypress、Selenium、Appium、Detox、Maestro、TesterArmy。
  • 通过检测表识别源运行器,并读取对应的迁移指南和引擎页面。
  • 迁移指南映射源运行器的配置、命令和 API 到 e2e,并说明 e2e 尚未具备的能力(标记为“Not yet”“No equivalent”或缺失)及当前变通方法。
  • 使用 MIGRATION.md 记录每个源文件的迁移状态、断言数量、备注等。
  • 支持 TesterArmy 通过 MCP 服务器读取测试,但只使用读取工具,不创建、更新或删除任何内容。
  • 提供缺陷检查(可选),通过植入小缺陷验证新旧套件是否都能捕获。
  • 支持在迁移过程中使用 e2e MCP 工具(open_session、observe、locate)学习精确名称,或通过运行测试并阅读 trace 页面来调试。

使用方式

  1. 恢复或开始:查找 e2e 配置旁或仓库根目录的 MIGRATION.md。如果存在,读取它以及其 Source 行指定的迁移指南和引擎页面。检查进度文件与仓库是否一致,运行 Run new 命令一次。如果 Harness 行未标记完成,进入构建 harness 步骤;否则进入选择切片步骤。没有进度文件则视为首次会话。

  2. 清点套件(首次会话):从仓库回答源运行器、测试、共享代码、运行方式、e2e 位置、旧套件能否在此运行等问题。使用运行器自己的列表或 dry-run 模式统计测试,而不是 grep。编写 MIGRATION.md,每个源文件一行 todo。询问每个切片是否还应针对植入缺陷运行,并记录 Defect check: on 或 off。

  3. 构建 harness(一次):配置 e2e,启动应用,并让一个测试通过。如果没有 e2e 配置,运行 npx e2e init --yes(移动设备项目加 --engine mobile)。询问用户智能体步骤使用哪个模型并配置。移植 CI 任务的编排,复用仓库自己的脚本。安装包后运行 npx e2e doctor(e2e 0.23.0 或更新)并修复所有失败检查。移植最简单的源测试作为冒烟测试,必须在所有目标上通过。在进度文件中标记 harness 完成。

  4. 选择切片:切片是本次会话能完成并保持绿色的内容:一个文件、一个文件夹、一个标签或一个功能区域,通常一到五个测试。询问用户选择哪个。如果用户让你决定,按顺序建议:共享辅助已移植的测试;在旧运行器中经常失败的测试;需要指南标记为“Not yet”等能力的测试放最后。在开始前将切片写入进度文件的 Next 部分。

  5. 移植切片:先移植切片的共享辅助,作为普通 .ts 文件(不是 .e2e.ts),例如放在 tests/support/ 下。然后逐个测试:保留标题,文件开头注释源文件;先按指南表格逐字翻译,每个源步骤一个 await 调用;每个源断言映射到自己的 e2e 断言;等待超时变为一个额外断言。在编写定位器前学习精确名称:使用 e2e mcp 的 open_session、observe 和 locate。睡眠或固定等待变为 agent.waitFor 或带超时的断言。平台分支变为 { platforms: [...] } 或平台 fixture 上的 if。源注释解释的变通方法先尝试普通步骤,仅在 e2e 也需要时保留。指南标记“Not yet”等且无变通方法时,测试留在旧运行器,标记 stays 并说明原因,可提议发送 npx e2e feedback --type feature -m "<the gap>"。不要更改应用代码。agent.act 在逐字移植通过后使用,且仅在配置了模型时。

  6. 证明每个移植:移植完成的条件是与源一样严格且每次都通过。在每个源覆盖的目标上运行:npx e2e run <file> --repeat-each 3,有智能体步骤时加 --no-cache。每个目标三次全过才算完成。旧套件能在此运行时,在同一构建上运行源测试。对照源检查严格性:每个源断言对应一个 e2e 断言,断言数量至少等于清点数量。绝不削弱断言、无故放宽超时或删除步骤来通过。任何失败先阅读 trace 页面再更改测试。

    缺陷检查(可选):Defect check 开启时,展示两个套件在同一缺陷上失败。经用户同意,在源断言检查的最终状态中植入小缺陷,重建,确认应用显示缺陷,然后运行 Run old 和 npx e2e run <files> --no-cache。只回滚该文件,重建,确认 git diff -- <file> 为空。记录结果。

  7. 运行两个套件:在用户移除源测试之前,两个运行器都保留它。已移植的测试也留在旧套件中。

适用场景

  • 团队希望从 Playwright、Cypress、Selenium、Appium、Detox、Maestro 或 TesterArmy 迁移到 e2e。
  • 需要渐进式迁移,保持旧测试套件继续运行,降低风险。
  • 需要记录迁移进度,支持多个会话或多个智能体协作。
  • 需要验证新旧套件在缺陷检测上的一致性。

限制

  • WebdriverIO for the web 没有指南,需用 Selenium 指南映射其 WebDriver 调用,并告知用户映射是部分的。
  • 带有 Appium 能力的 WebdriverIO 视为 Appium 项目。
  • 有两个源运行器的项目一次迁移一个,进度文件各占一节。
  • TesterArmy 测试不在仓库中,需通过 TesterArmy MCP 服务器读取;客户端没有 testerarmy 工具时需添加服务器、让用户登录并重启会话。
  • TesterArmy 从不返回密码或 TOTP 密钥,需在配置中命名每个凭据并让用户设置环境变量。
  • 使用 TesterArmy 的 run_test 和 run_group 会启动针对已部署应用的云运行,仅在用户同意时调用,否则记录 Run old: not run。
  • 绝不创建、更新或删除 TesterArmy 中的任何内容;退役测试意味着用户禁用或删除它。
  • 指南标记“Not yet”“No equivalent”或缺失且无变通方法时,测试留在旧运行器。
  • 不要更改应用代码;需要测试 id 时使用 agent.act 或不同定位器,或向用户提议应用更改。
  • 缺陷检查植入的缺陷是例外,必须在同一会话中回滚。
  • 缺失事实:具体收费、价格、平台支持细节、效果数据暂未提供。