ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Maestro 实战 5 招:一套 YAML 用例双端通跑

Maestro 实战 5 招:一套 YAML 用例双端通跑 Maestro 实战 5 招一套 YAML 用例双端通跑【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/MaestroMaestro 是一个用 YAML 写移动端端到端测试的开源框架同一套 flow 文件可以在 Android、iOS 和 Web 上执行。这篇文章不铺概念直接按真实场景讲怎么把一条交互流跑起来、怎么让用例不 flaky、怎么把公共步骤抽出来复用、怎么让逻辑跨双端。1. 先把一条登录流跑起来装好 CLI确认环境可用Maestro 要求系统里有 Java 17CLI 一行脚本就能装上README 里有对应 macOS / Linux / Windows 的安装命令。装完先跑一下maestro --version确认二进制可用再决定往哪个模拟器或真机指向。YAML flow 在真机上执行最小用例长什么样一个可用的 flow 其实就几行声明目标 app然后逐条写交互命令。它能帮你解决的问题是——不用写一行测试框架代码纯文本就能描述启动 → 输入 → 断言appId: com.example.app --- - launchApp - tapOn: Username - inputText: standard_user - assertVisible: Products仓库里 e2e/workspaces/web/simple.yaml 是一条完整可跑的示例从登录到断言商品列表一共十几行可以直接抄下来改 appId 用。2. 不稳定的步骤别怪用例智能等待是内建的不用写 sleep实际跑起来你会发现Maestro 的tapOn、assertVisible等命令会先等目标元素出现并稳定再执行动态加载的界面不需要手动加sleep()。这也是 YAML flow 比脚本化 UI 测试体感上稳的主要原因之一。retry 兜住偶发的丢点击WebView 场景里点击偶尔会被静默丢弃仓库里 e2e/workspaces/simple_web_view/webview.yaml 的处理方式值得照抄- retry: maxRetries: 2 commands: - tapOn: Open Login Page - assertNotVisible: Open Login Page重试块把点击 验证结果打包失败了整体重来而不是把断言和动作拆开赌运气。常用稳态命令对照命令解决什么问题retry点击/滑动偶发失效打包重试optional: true元素可能不存在跳过不报错extendedWaitUntil加载特别慢的页面显式给长超时waitForAnimationToEnd轮播/转场动画结束后再操作optional: true是我用得最多的一个弹窗、引导页这类可能在也可能不在的元素标上它就永远不会让整条用例挂掉。3. 公共片段用 runFlow 复用别复制粘贴把 onboarding 抽成子流程每个用例都要先过一遍引导页这个逻辑只该存在一份。Wikipedia 的 e2e 用例就是这么拆的——主流程只写一行引用具体点击细节收在子文件里- runFlow: subflows/onboarding-android.yaml完整的目录结构可以看 e2e/workspaces/wikipedia/主流程和subflows/分层很清楚。条件子流程弹窗在才处理iOS 端经常有偶发弹窗Maestro 的 ios-advanced-flow.yaml 里的写法很典型when.visible命中才执行内部命令没弹窗就整块跳过- runFlow: when: visible: You have been logged out commands: - tapOn: Continue without logging in这里有个容易忽略的点runFlow支持label字段失败报告里会显示这段的业务含义排查时不用回头翻 YAML。4. 同一套用例iOS 和 Android 都跑appId 是唯一必须分开写的地方双端应用包名不同org.wikipediavsorg.wikimedia.wikipedia所以最实际的分工是各端一个薄入口文件公共步骤全部下沉到子流程端差异用when分流。Wikipedia 用例里 Android 端靠元素 id 定位iOS 端用swipe 文本定位主流程几乎一致。Web 端用同一套 YAMLWeb 测试不用换语法把appId换成url就行url: https://www.saucedemo.com/ --- - launchApp - tapOn: Usernamee2e/workspaces/web/ 下面有一整套 web 用例覆盖输入、滚动、iframe、SPA 路由。注意仓库 e2e/README.md 里提到的一个坑本地 fixture 页面要先起静态服务再跑 flowlaunchApp对着死端口也能成功失败信息会指向选错的地方。用 tags 批量跑maestro test可以一次跑一个目录下的全部 flow仓库自己的 e2e 套件就靠tags字段如android/ios/passing/web区分环境和预期结果CI 里按 tag 过滤即可不用维护脚本。5. 让用例多做一点脚本与动态数据runScript 生成测试数据硬编码的输入没法覆盖边界情况。Maestro 内置 JS 引擎runScript执行脚本后用${output.result}注入结果- runScript: scripts/getSearchQuery.js - inputText: ${output.result} - assertVisible: ${output.result}对应脚本 e2e/workspaces/wikipedia/scripts/getSearchQuery.js 只有一行output.result qwerty;换成随机串、时间戳就是现成的参数化能力。截图断言兜底像素级变化assertScreenshot可以把当前界面和基准图做相似度比对适合验证图表渲染、布局错位这类元素都在但画错了的问题阈值可调失败时会保存实际截图方便 diff。到这里一条用例从写、稳、复用到跨端都有了着落。想动手的话建议先跑通最短的一条e2e/workspaces/wikipedia/android-flow.yaml 正文只有一行launchApp装上 CLI、起个模拟器就能验证整个链路是通的然后再往里面加你自己的tapOn。【免费下载链接】MaestroPainless E2E Automation for Mobile and Web项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表