SuperAPI AI 工具集

marionette-flutter-to-patrol

测试与质量

查看项目

更新于 10-29 03:12

技能介绍

用途

本技能把一次已验证的 Marionette 会话转换为 Patrol E2E 测试。会话目录包含 steps.md(服务器写入的逐行工具调用记录)、report.md(驱动对测试内容的总结)与 screenshots/(证据)。技能只覆盖该输入对编写 Patrol 测试的影响:应编码哪些动作、哪些组件需要补 key、每个步骤如何映射到 Patrol、报告隐含哪些断言与数据规则。Patrol 自身用法来自 Patrol 的独立技能,需先加载 patrol-write-test 与 patrol-test-architecture。

主要能力

  • 解析会话:读取 steps.md 与 report.md,按时间顺序合并 CLI 多命令会话;区分动作行与观察行(connect、disconnect、截图、日志等不编码)。
  • 识别弱选择器:坐标点击、重复文本、按类型点击、focus 输入等提示缺失的 key,并列出需补 key 的组件(含参数化 key、对话框、snackbar、列表等)。
  • 步骤映射:把 tap、enter_text、swipe、scroll_to、press_back_button、press_key、long_press、double_tap、secondary_tap、pinch_zoom 等映射为 Patrol 调用;DB/API 检查映射为后端断言。
  • 断言设计:每个 Tested 流程和 Checks 项生成断言组;要求正向状态与负向检查并存、等待加载完成、按屏幕顺序读取完整列表、瞬时 UI 在动作后立即断言。
  • 处理 MarionetteBinding 冲突:把 main() 启动逻辑抽到 bootstrapApp(),让 openApp 不调用 main(),并在交接中声明该偏离。
  • 声明偏离:与 Patrol 规则不一致处需在 hand-over 中说明原因。

使用方式

  1. 加载 Patrol 技能(patrol-write-test、patrol-test-architecture),未安装时可通过 npx skills add leancodepl/patrol/skills -s '*' -a claude-code -y 或 dart run skills@ get -p patrol -s patrol-write-test -s patrol-test-architecture 获取;Claude Code 中可用 /plugin install flutter-patrol@leancode-ai-plugins。
  2. 准备输入:会话目录、规格或验收标准、空闲设备 id、测试账号文档、本地后端 seed 重置方式与可消费的 seed 行。无会话时先用 marionette-flutter-setup 开启会话报告,再用 marionette-flutter-drive-app 驱动流程。
  3. 完整阅读 steps.md 与 report.md,查看截图;按用户意图拆分测试,记录每个测试的步骤范围。
  4. 先补 key(独立提交),遵循 keys.dart 约定;处理私有组件、const 丢失、瞬时组件等常见情况。
  5. 重构启动逻辑避免 MarionetteBinding 与 patrolTest 冲突;停止 flutter run 与会话,配置 .patrol.env 的 dart-defines。
  6. 逐行翻译动作,编码每个动作行或声明合并/丢弃原因;处理 press_key Enter 提交、下拉刷新静默失效等细节。
  7. 根据报告编写断言组,确保负向检查旁有正向状态、等待加载完成、完整有序读取列表。

适用场景

  • 已有 Marionette 会话记录,需要生成对应的 Patrol E2E 测试。
  • Flutter 项目缺少 patrol_test/ 时,需先按 patrol-setup 或官方文档搭建 Patrol。
  • 需要把驱动过程中发现的弱选择器转化为稳定 key 与测试代码。

限制

  • 不编码已知 bug;仅报告。怀疑项需确认后再依赖。
  • 报告中标为“Not covered”的内容不编造测试;提前终止的会话只编码已到达部分。
  • 不提供 Patrol 自身 API 的完整说明,需依赖 Patrol 技能。
  • 无 report.md 时只能依据 steps.md、截图和规格工作并声明。
  • 需要空闲设备与后端 seed 控制;测试账号文档须由调用方提供,不得编造真实人物数据。
  • 本资料未提供具体价格、平台支持范围或效果承诺。