Maestro 移动测试快速上手:5 分钟跑通第一条 YAML 用例,一套脚本两端复用
【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro
写一套能在 Android 和 iOS 上同时跑通的 UI 测试,多数团队卡在三件事:两套框架各写一遍、等待逻辑靠sleep猜、元素定位得啃平台私有 API。Maestro 移动测试把这三件事压回一个方向:用 YAML 写步骤,同一份文件直接在 Android、iOS 和 Web 浏览器上执行,无需编译。项目的官方定位是一句 tagline——"Painless E2E Automation for Mobile and Web"(不折腾的移动端与 Web 端到端自动化)。这篇文章只干两件事:让你在下一节结束前拿到一条本机通过的用例,然后告诉你怎么把它扩展成团队级回归。
老路子卡在哪,Maestro 换了什么
对照一下传统写法的三个卡点,判断这套工具适不适合你现在的处境:
- 两份脚本变一份。老路线是 Android 用 Espresso/UIAutomator、iOS 用 XCUITest,同一个登录回归要维护两种写法。Maestro 用一个 YAML 文件覆盖两端,按文案找元素(比如点击写着"登录"的按钮)在两个平台都生效,仓库里的维基百科示例就是这么分文件的:一份主流程,
e2e/workspaces/wikipedia/下按平台各挂一个子流程。 - 等待逻辑交给断言。老脚本里散落着
sleep(2),机器快时浪费时间、机器慢时直接超时。Maestro 的assertVisible这类步骤默认带轮询等待:元素没出现就自己重试,直到出现或超时,你的流程里不需要写死任何等待时间。 - YAML 能直接 review。步骤是给人看的文本,测试评审时不用打开 IDE;改动一个用例的门槛从"会写代码"降到"会看列表"。
判断标准:如果你的回归脚本目前是 Android、iOS 各一份,或者流程里还有写死的等待时间,就从下面这条用例开始替换。
最快路径:装好工具,跑通第一条用例
一条命令装好 CLI
git clone https://gitcode.com/GitHub_Trending/ma/maestro cd maestro ./scripts/install.sh maestro --version脚本会自动拉取最新的 CLI 包装到~/.maestro并写进 PATH,前置条件只有 Java 17+、curl和unzip;跑完后开个新终端,maestro --version能打印版本号就算装好。
八行 YAML 跑通第一个用例
把仓库 Web 示例e2e/workspaces/web/simple.yaml的核心步骤存成first-flow.yaml:
url: https://www.saucedemo.com/ --- - launchApp - tapOn: Username - inputText: standard_user - tapOn: Password - inputText: secret_sauce - tapOn: Login - assertVisible: Products执行时 Maestro 会打开这个公开登录页,按标签文案找到 Username、Password 两个输入框,逐字敲入账号密码,点下 Login,最后只有页面上出现 "Products" 才算通过——全程没有一行等待代码。测手机应用时,把首行换成appId: 你的包名,后面步骤原样照抄。
然后执行maestro test first-flow.yaml🚀 终端打印1 tests completed且退出码为 0,你的第一条 Maestro YAML 用例就算跑通了。
从仓库示例里抄三个能落地的场景
e2e/workspaces/下的示例本身就是一份答案集,挑三个方向直接抄:
登录回归。Web 示例e2e/workspaces/web/simple.yaml就是前面那八行的完整版,maestro test e2e/workspaces/web/simple.yaml一条命令,几十秒内得到通过/失败结论,失败现场自带截图。相邻的simple_web_view/示例还展示了不稳定点击的解法:仓库里那段 WebView 流程用retry(maxRetries: 2)包住一个可能丢点击的操作,配合assertNotVisible确认页面真的切走了,而不是靠猜。
跨平台兼容。维基百科示例是 Maestro 跨平台跑法的标准结构:主流程只写公共步骤,差异部分拆进subflows/(Android、iOS 各一个文件),只在部分平台出现的弹窗用when: visible做门控——
- runFlow: when: visible: "You have been logged in as logged out" commands: - tapOn: text: "Continue without logging in"意思是:这个"已登出"弹窗没出现时整段自动跳过,出现了才点掉。主流程因此不用为平台差异写 if/else,同一套步骤在两端复用。
AI 辅助调试。页面改动后不必每次手写用例。执行maestro mcp,CLI 会把检查屏幕、点按元素、跑整段流程等能力暴露成标准 MCP 工具,供 LLM 客户端调用:你用一句"确认登录页输入框还在不在"发指令,模型自己去查屏幕、写流程、跑流程并回传结果。入口和扩展方式在 maestro-cli/src/main/java/maestro/cli/mcp/ 目录,里面的 README 写清了协议边界。
团队怎么把它接进日常
公共步骤抽成子流程
维基百科的 Android 主流程只有十几行:开机引导整段抽成子流程,搜索词的生成交给一段 JS 脚本,输出再传给下一步——
- runFlow: subflows/onboarding-android.yaml - runScript: scripts/getSearchQuery.js - inputText: ${output.result}登录、引导这类公共流程将来改动时,只改子流程文件,引用它的所有主流程零改动,这就是团队"公共步骤库"的形态。
接进 CI 当回归门禁
CI 里执行maestro test <用例目录>可整目录批量跑,退出码就是结论:非 0 即有失败,直接挂到构建门禁上。失败截图默认落在.maestro/目录(本仓库e2e/demo_app/下就有一份现成的),把它作为失败产物归档,复盘时不用重跑就能还原现场;仓库自己的 CI 就是这么做的,细节见 e2e/README.md。✅
去哪继续挖
- e2e/workspaces/:仓库内置示例库,Web 页面、Wikipedia 应用、WebView 三组流程,文件头都带
passing标签,说明官方 CI 已验证可跑通,可直接当学习材料。 maestro download-samples:一条命令下载一套可运行的示例应用加流程,不用为自家应用写任何用例就能先玩起来,说明见 e2e/README.md。- maestro-cli/src/main/java/maestro/cli/mcp/:MCP 服务端源码,想让自己的 AI 工具链接设备就从这个目录读起。
- 社区入口与官方文档链接在 README.md 顶部"Resources & Community"一节,照着跳转即可。
下一步就做一件事:把上面八行示例存成first-flow.yaml,让maestro test在今天打印出1 tests completed——那就是你团队流水线上的第一条用例。
【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考