Maestro 1.39.0 中的新内容

2024-12-13   出处: medium  作/译者:Bartek Pacia/溜的一比

包括首个 AI 驱动的命令、新的分片选项、iOS 横屏支持,以及许多错误修复和稳定性改进。

自上次发布 Maestro v1.37.0 已超过三个月。今天,我们很高兴向您推出 v1.39.0。

新的 AI 驱动命令

此版本引入了首批 AI 驱动命令:assertWithAI​ 和 assertNoDefectsWithAI​。

“什么?AI 驱动的命令?什么时候应该使用它们?”很高兴你问了这个问题!

Maestro 的命令非常出色:可靠且确定性强。但现实世界不是这样的,有时很难,甚至不可能,将某些情况表达为明确的条件。

看看下面这个简单的例子。对我们人类来说,很明显这个屏幕存在按钮重叠的问题(除了真的很丑以外,但我们暂且不管这个):

两个按钮都可见且可以点击,因此像 assertVisible​ 这样的常规命令会通过,而 tapOn​ 也可以工作。如何捕捉到这个问题?您可以使用 assertNoDefectsWithAI​:

  • assertNoDefectsWithAI

真的不能更简单了。现在,您可以收到明显出错的通知。

如果您想执行特定的断言,还可以使用 assertWithAI​。得益于这个功能,您可以对断言做出大胆尝试!

  • assertWithAI:
    assertion: A picture of a cute bunny is visible
    optional: true

查看我们的文档以了解如何在 Maestro 中配置 AI。简而言之,您需要提供自己的 OpenAI(或 Anthropic)API 密钥并将其作为环境变量导出。

我们是怎么想到这个主意的?

我们查看了问题跟踪器,发现当前获赞最多的问题是 #1222,其作者请求添加新命令以比较不同运行中的截图,以确保 UI 没有破坏。

截图测试有各种名称:原生 Android/iOS 社区称之为快照测试,Flutter 社区使用 "golden tests" 这个术语,还有 "baseline tests" 在流传。我们认为它们都是相同的概念。

这个问题是合理的,我们甚至开始实施它,但后来我们问自己:我们可以尝试做一些不同的事情吗?

截图测试的主要问题在于维护基准——这些“正确的”截图必须被检查并提交到 git 仓库中并进行维护。我们自己也经历过这种痛苦,并思考如何摆脱基准的束缚。不久之后我们决定使用 LLMs。

AI 驱动命令的下一步是什么?

Maestro 与 AI 的集成仍处于早期阶段,但从早期采用者的反馈来看,我们确信我们走在正确的方向上,前景非常广阔。我们看到了这一功能的巨大潜力,对其未来改进感到非常兴奋。

当然,请放心——我们仍然希望添加对传统截图测试的支持。我们认识到它在许多需要可预测性的场景中很有用——敬请关注!

并行执行改进

来自 Tarek Belkahia 的 PR #1955

在此版本中,您可以为 maestro test​ 命令传递两个新的互斥选项:--shard-all <N>​ 和 --shard-split <N>​,其中 N 是要运行测试的设备数量。

  • --shard-split <N>​ 与现在弃用的 --shard <N>​ 选项相同(将在未来版本中移除)——它将您的测试套件分成若干块,并在不同设备上运行每块,从而加速测试。
  • 新的 --shard-all​ 略有不同。假设您想确保所有流程都能在小屏手机、大屏手机(有人还记得“平板手机”这个词吗?)和一台平板电脑上通过。--shard-all​ 就让您能在每个连接的设备上运行所有流程。

CLI 运行分片测试的输出也得到了改进:

改进后的终端输出使您可以轻松查看分片测试套件的状态。

iOS 横屏模式

这是一个长期存在的问题,但现在不再是问题了!

重要错误修复

  • 允许在 setLocation​ 和 travel​ 命令中使用环境变量(#1988 由 Prasanta Biswas 提交)
  • 修复了 JavaScript 输出使用整数导致反序列化错误的问题(#1788 由 Muhammed Furkan Boran 提交)
  • 修复了在 flowsOrder​ 指定工作空间中的所有测试时没有测试被运行的问题(#2003)
  • 修复了“BlockingCoroutine 正在取消”的混乱错误消息(#2036)

查看更新日志以获取完整列表。

Rhino JavaScript 引擎的即将弃用

Maestro 当前的默认 JavaScript 引擎是 RhinoJS。它可以处理简单脚本,但并没有实现现代 ECMAScript 标准——实际上,它停留在 ES5,这大大降低了它的实用性。

幸运的是,Maestro 也支持 GraalJS——一个支持 ECMAScript 2022 的更强大的 JavaScript 引擎。GraalJS 自 2023 年 6 月发布的版本 1.30.0 起就已经可以在 Maestro 中使用。未来,我们将把 GraalJS 作为默认的 JavaScript 引擎,然后移除 RhinoJS。

查看这个问题以了解我们如何推进这一变更。我们建议尽快切换到 GraalJS——如果在此过程中遇到任何回归,请创建一个问题并告知我们!

总结

本次发布就到此为止!

我们要感谢社区中所有测试新更改、创建功能请求和错误报告的成员。

特别感谢 Tarek Belkahia——一位 Maestro 社区的长期成员和热心的开源贡献者。本次发布的大部分错误修复和新功能都是他工作的成果。非常感谢,Tarek!


声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
/62 人阅读/0 条评论 发表评论

登录 后发表评论
最新文章