news 2026/9/12 17:33:24

双端回归从「一台台串行」压到「三台并行」:Midscene.js 多设备协同测试实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
双端回归从「一台台串行」压到「三台并行」:Midscene.js 多设备协同测试实战

双端回归从「一台台串行」压到「三台并行」:Midscene.js 多设备协同测试实战

【免费下载链接】midsceneGUI Agent for E2E Testing项目地址: https://gitcode.com/GitHub_Trending/mid/midscene

同一套下单用例要在 Android 和 iOS 上各跑一遍,串行执行、来回切设备,花在人工核对上的时间不少。Midscene.js 把自动化步骤写成自然语言指令("点击登录按钮"),由 AI 模型看屏幕决定怎么操作;它的 CLI 还能把一批 YAML 用例文件分发到多台设备并行执行,一次回归覆盖两个平台。

30 秒上手:最小可运行示例

先安装@midscene/cli和对应平台的@midscene/android@midscene/ios,确认连接:Android 设备要出现在adb devices列表里;iOS 需要自动化服务 WebDriverAgent(WDA)在运行。然后写第一个用例文件:

android: deviceId: emulator-5554 launch: https://www.ebay.com tasks: - name: search for headphones flow: - ai: 在搜索框输入 Headphones 并点击搜索 - aiAssert: 页面上出现 Filter 按钮

midscene --files ./search-headphone.yaml执行。ai行是自然语言指令,模型看截图后执行;aiAssert是让模型判断条件是否成立,作为断言用。

它是怎么跑的

  • 用例文件:一个文件两部分——顶部android:ios:块(指定 deviceId 和启动页),下面tasks列表(每条自然语言步骤)。
  • 批量文件:一个索引 YAML 声明files(支持*.yaml这类 glob 模式)、concurrentcontinueOnError,由批量执行器实现按这些参数调度。
  • 并发concurrent: n表示同时跑 n 个文件,默认 1 即串行;每个文件各自写 deviceId,同一批就能分到不同设备、不同平台。
  • 结果:跑完 CLI 会打印成功/失败摘要,每个用例还生成一份 HTML 报告,可回看每步截图和模型判断。

三个典型场景

兼容性回归:同一用例、多台设备。每台设备写一个文件,都放进批量文件的files

concurrent: 5 continueOnError: true files: - "./android/*.yaml" - "./ios/*.yaml"

continueOnError: true保证一台设备失败不会终止整批,摘要里逐条列出失败文件,方便只重跑失败项。

批量用例执行:用例之间互不依赖时,把并发拉满。20 条回归串行跑 40 分钟,concurrent: 4时约 12 分钟跑完(取决于单条时长);偶发不稳定的用例配retry: 2,失败自动重跑。

跨设备协作:一台 Android 设备跑"加购物车"用例,一台 iOS 设备跑"核对购物车状态",两个文件各写各的 deviceId,放进同一批执行。需要传递数据时,前一个用例用aiQueryoutput把结果写进 JSON 文件,后续流程再取用。多设备批量的现成脚本可以参考 multi_yaml_android_scripts。

关键配置速查

参数默认作用什么时候该调
concurrent1并行执行的用例文件数多台设备时设为设备数;用例有先后依赖时保持 1
continueOnErrorfalse某文件失败后是否继续夜间回归设 true,避免一个失败拖住整批
retry0失败文件额外重跑次数用例偶发抖动时设 1~2
setup主用例前执行的准备脚本登录一次后让所有用例复用,省去逐条登录
shareBrowserContextfalse文件间共享浏览器上下文仅 Web 目标有效,Android/iOS 场景不涉及

容易踩的坑

  1. adb devices看不到设备→ 未开 USB 调试,或电脑没被授权 → 打开开发者选项和 USB 调试,在设备弹窗里点"始终允许"。
  2. iOS 用例卡在启动→ WDA 没跑起来,或wdaPort没配对 → 先确认 WDA 正常,再在ios块里指定wdaPort
  3. 脚本跑到了别的设备上→ 接了多台设备但 YAML 没写 deviceId,默认取第一台 → 显式写deviceId,用adb devices核对。
  4. 指令执行了但结果不对→ 描述太笼统,模型点错元素 → 指令里引用屏幕上可辨认的特征(按钮文字、位置),关键步骤后加一条aiAssert
  5. 并发一高就批量超时→ 多个用例挤同一个模型 API 额度或设备网络 → 调低concurrent,或给不同批次配置独立模型环境。

先拿 1 台 Android + 1 台 iOS 各跑通一个最小用例,再按上面的批量文件模板扩到整套回归。🚀

【免费下载链接】midsceneGUI Agent for E2E Testing项目地址: https://gitcode.com/GitHub_Trending/mid/midscene

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 17:33:23

基于扩展卡尔曼滤波的电池SOC估计技术详解

1. 项目背景与核心需求在电池管理系统中,荷电状态(SOC)估计是最关键的技术挑战之一。SOC作为反映电池剩余电量的核心参数,其估计精度直接影响电池系统的安全运行和使用寿命。传统库仑计数法虽然实现简单,但存在初始误差…

作者头像 李华
网站建设 2026/9/12 17:28:06

Java课程设计:Swing广告墙系统登录、权限与查询实现解析

简介:这是一份基于 Java 图形界面开发的“广告墙”课程实验设计项目,面向计算机相关专业在校学生、教师及企业开发者,尤其适合需要完成课设、毕设或项目初期演示的读者。项目实现了管理员登录注册、广告信息增删改查、用户个人广告查询等功能…

作者头像 李华
网站建设 2026/9/12 17:25:31

如何用 SMFS 把 Supermemory 容器挂载为本地目录并配置 memory paths

如何用 SMFS 把 Supermemory 容器挂载为本地目录并配置 memory paths 【免费下载链接】supermemory Memory and context engine app that is extremely fast, scalable, and can be run fully locally. The Memory API for the AI era. 项目地址: https://gitcode.com/GitHu…

作者头像 李华
网站建设 2026/9/12 17:24:43

MCP Agent把Embedding全改成了随机数:补完深度学习入门才看懂日志

MCP Agent把Embedding全改成了随机数:补完深度学习入门才看懂日志 周一下午部门突然接到需求:给智能Agent接入Model Context Protocol,让它能直接查数据库、调API。“这不就是给模型装手和脚嘛”,我当时在工位上搓着手想。三小时后,Agent成功接上Model Context Protocol,可它做…

作者头像 李华
网站建设 2026/9/12 17:24:39

合规审计查出19处开源引用缺失,CodeWhisperer的Reference Tracker帮我扛住了律师函

合规审计查出19处开源引用缺失,CodeWhisperer的Reference Tracker帮我扛住了律师函 周五下午三点多,我正在改API网关的超时逻辑,屏幕右下角弹出了合规团队的消息:“第三方审计发现,当前分支有19个文件缺少必要的开源引用声明,其中包括GPL-3.0代码,请48小时内完成整改,否则可能…

作者头像 李华