Maestro:用 YAML 在 5 分钟跑通移动 E2E 自动化测试
【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro
回归测试跑一轮要等半天,最后发现挂掉的不是功能,而是一个按钮没找着——这是移动 E2E 自动化测试里常见的情况。Maestro 走的是另一条路:用人类可读的 YAML 写自动化流程,同一份流程在 Android、iOS 和 Web 上都能跑,不用编译,改完直接再跑一遍。
它替你省掉了什么:两种做法的对照
| 传统做法 | Maestro 做法 |
|---|---|
| 平台各自的测试代码:Espresso、XCTest、Selenium 各写一套 | 一份 YAML 流程,三端通用 |
| 改一处测试要编译、打包、安装 | 流程是解释执行的,存盘就能重跑 |
| 元素定位靠挖资源 ID 或 XPath | 用屏幕上可见的文字直接找元素 |
手写sleep()等动画,时长全靠猜 | 内置智能等待,自动等元素出现 |
| 用例写在代码里,QA 不好上手 | YAML 是纯文本,能读文档就能写 |
README 里明确说了,Maestro 的设计参考了 Appium、Espresso、UIAutomator、Playwright 这些前辈的教训;运行前提只有一个——系统装了 Java 17 或更高版本。
装好 CLI,跑通第一条流程
macOS、Linux、Windows WSL 的安装都是同一条命令:
curl -fsSL "https://get.maestro.mobile.dev" | bash装完后写一个新建联系人的测试文件,这个例子直接来自仓库 README:
appId: com.android.contacts --- - launchApp - tapOn: "Create new contact" - tapOn: "First Name" - inputText: "John" - tapOn: "Save"用maestro test flow_contacts_android.yaml运行,流程就跑完了。模拟器连接、应用构建安装这些前置准备去官方文档看即可,这里只保留最短路径。
看懂 4 个概念,就能写出流程
用自然文本找元素。tapOn: "Save"直接匹配屏幕上的文字,不需要写选择器;匹配到多个时加index: 1指定第几个。
断言也是命令。assertVisible: "Products"、assertNotVisible和交互命令一样按顺序执行,断言不通过测试就判失败,不用额外包一层断言框架。
智能等待是内建的。每条命令执行前,Maestro 会等目标元素出现并稳定,加载动画、延迟弹出的弹窗这类动态 UI 不用你决定在哪插sleep()。
可选步骤和变量。步骤上加optional: true,找不到就跳过,适合"可能出现的广告位";runScript执行一段 JS,结果用${output.result}传给后面的步骤。
仓库里的真实用法:滚动验证首屏之外的内容
e2e/workspaces/web/ 下有一组针对公开演示站点的可运行流程,下面这个场景很典型:登录后断言商品列表,滚动一次,再断言滚动后"加入购物车"才出现:
- launchApp - tapOn: Username - inputText: standard_user # ... 输入密码并登录 - assertVisible: Products - scroll - assertVisible: '.*Add to cart.*'同目录下的 e2e/workspaces/wikipedia/ 则演示了真实 App 的 Android/iOS 流程:用runFlow复用子流程、用id定位、配合runScript注入搜索词,可以看到生产级写法长什么样。
项目是怎么组织的:模块职责表
仓库是一个多模块 Gradle 工程,主要模块如下:
| 模块 | 职责 |
|---|---|
| maestro-cli | 命令行入口:跑测试、出 HTML 报告、内置 MCP server |
| maestro-orchestra | 流程解析与执行引擎 |
| maestro-orchestra-models | YAML 各命令的数据模型定义 |
| maestro-client | 设备通信层:元素查询、手势、截图、JS 引擎 |
| maestro-android、maestro-ios | Android 与 iOS 平台驱动 |
| maestro-ai | AI 辅助模块,对接 Anthropic / OpenAI |
想弄清一条tapOn背后发生了什么,顺着 maestro-cli → maestro-orchestra → maestro-client 的调用链看就够。
周边工具链:Studio 和 Cloud
Maestro Studio是免费的桌面 IDE(不开源,直接下载),可以录制操作、可视化地构建流程和检查元素,解决"不想在终端和文件之间反复切换"的问题。
Maestro Cloud是付费服务,面向套件变大之后的场景:在专用基础设施上并行跑数百个测试,官方称执行时间最多可缩短 90%,带通知、确定性执行环境和完整调试工具,提供 7 天试用。
接进 CI:两条命令的事
任何能装 Java 17 的 CI 系统都能跑 Maestro:
- name: Install Maestro run: curl -fsSL "https://get.maestro.mobile.dev" | bash - name: Run tests run: maestro test ./flows/适合谁、什么时候值得引入
如果你的团队要同时维护 Android 和 iOS(可能还有 Web),又想降低 E2E 用例的编写门槛,这套 YAML 方案值得放进工具箱——流程可读、可评审、平台无关,维护成本随平台数量增长得很慢。反过来,如果你只测单端、且要求深度耦合应用内部状态,Espresso、XCTest 这类原生框架仍有空间,不必强行换栈。
【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考