不写测试代码,也能给移动应用做自动化 UI 测试
【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro
发版前,你得在真机和模拟器上把每个页面、每条流程手动点一遍——登录、下单、退出、再登录,一个下午就耗在重复点击上,还总担心漏掉某个分支。Maestro 就是来解决这件事的:它用一个可读的 YAML 文件描述你的操作步骤,再在 Android、iOS 甚至浏览器上自动执行。它适合不懂测试框架、只想把回归测试交给机器的开发者、测试和产品同学。
为什么选 Maestro
- 跨平台:同一套写法覆盖 Android、iOS 和 Web(含 Flutter、React Native、混合应用),跑在模拟器、真机或浏览器上。
- YAML 而非代码:操作写成
launchApp、tapOn、assertVisible这类短句,人读得懂,改起来也快。 - 自带智能等待:命令会等元素出现再执行,动态界面不易"跑飞",不用手写 sleep。
- 解释执行:流程是解释跑的,无需编译,改完立即生效。
- 一条命令安装:支持 macOS、Linux 和 Windows(WSL)。
从 0 到跑起来
先确认装了 Java 17 及以上:
java -version用一条脚本安装命令行工具(CLI,即通过终端输入指令运行的程序):
curl -fsSL "https://get.maestro.mobile.dev" | bash最小可运行的流程,就一个 YAML 文件:
appId: com.android.contacts --- - launchApp - tapOn: "Save" - assertVisible: "Profile"接着运行:
maestro test flow.yaml控制台会逐步打印每一步结果,全部通过即返回成功。
核心功能怎么用
1. 把操作步骤写成流程,交给测试
真实场景:新版本改了登录页,你想确认"能登录并看到首页"没被破坏。怎么操作:把路径写成tapOn/inputText命令,用assertVisible收尾断言。得到什么:一条可重复跑、能进 CI 的回归用例,替掉你每天手动点的那一遍。
2. 给流程录一段演示视频
真实场景:向开发报一个偶现 bug,光贴截图说不清。怎么操作:
maestro record flow.yaml加--local可本地渲染并指定输出文件,如maestro record flow.yaml demo.mp4 --local。得到什么:一段把每步操作叠加渲染出来的视频,演示和 bug 单都好用。注意它不是"边点边录、自动生成脚本",而是把已写好的流程渲染成视频。
3. 看不清元素?直接查界面结构
真实场景:tapOn找不到目标,多半是没选对定位条件。怎么操作:
maestro hierarchy maestro query --text "Login"得到什么:当前屏幕的视图层级(也就是界面上各控件的树状结构)和匹配到的元素,帮你把选择器写准。
进阶技巧
- 多设备并行:
maestro test --shard-split 2 flows/把流程均分到 2 台设备;--shard-all 2则是每台都跑全量。旧的--shards已弃用。 - 出报告:
maestro test --format HTML flows/生成 HTML 报告,CI 里常用--format JUNIT。 - 挑设备/平台:
--device "Emulator_1,Emulator_2"指定设备,-p android或-p ios指定平台。 - 按标签筛选:
--include-tags smoke、--exclude-tags slow决定这次跑哪些流程。 - 注入变量:
--env API_KEY=xxx把配置传进流程。
常见坑
- 别把 record 理解成"录制生成脚本":它只负责把已有流程渲染成视频,脚本仍需你自己写。
- 分片数不能超过设备数:
--shard-split N需要 N 台已连接设备,否则直接报错。 - 设备要先连上:
--device指定的设备若没连上会报 "not connected";Web 流程目前是 Beta,先确认入口地址可达。
写在最后
Maestro 把"写测试"的门槛压到"会读 YAML",回归、跨端、演示都能覆盖。从仓库里的 README 和 e2e/workspaces 的示例入手,能最快看懂各种命令的实际写法。
【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考