Macaca UI 自动化框架调研总结

Yinxl · 2016年12月07日 · 4056 次阅读

导语

前面写了两篇文章介绍了个人基于 Macaca 在 UI 自动化上的实践心得,那我们为什么会选择了 Macaca 呢,这篇文章将简单介绍一下我们选择 Macaca 的原因。

有哪些可用的 UI 自动化框架?

frameworks

他们的区别在哪里?

compare

我们是如何选择的?

条件 1:支持移动端 app 自动化

从以上对比其实已经可以比较明确的帮助大家做出自己的选择,从我所在的团队来讲,我们主要做的是移动端的 UI 自动化,相信现在大多数同学所做的也都是这一类的自动化,因此,仅限于 PC 端 webApplication 的几个框架就不可避免的要排除掉了,这其中包含 Selenium,PhantomJS,以及 KARMAR。

条件 2:支持多平台自动化

此外,对于移动端的 UI 自动化,我们希望可以同时覆盖安卓以及 iOS 平台,最好是一套脚本能同时在两个端上跑,鉴于此,只提供单一平台的 Selendroid,Robotium 可以暂时不用考虑了。

条件 3:学习成本低

经过上面两次筛选,我们的选择剩下了 Macaca && Appium && Calabash,这其中,Macaca 以及 Appium 都是支持多语言的,Appium 支持的最多,包含了 Ruby Python Java Js OC PHP C#(.Net) 这些几乎所有主流的语言,Macaca 目前支持 Js Java 以及 Python,也能基本满足需要,相比之下,Calabash 只支持 Ruby,这个对团队是有一定的挑战的,因为我们的团队大家基本上以 Java 技术栈为主,如果采用 Ruby,意味着所有的同学都要先学习一下这门语言,这个成本对于我们这样的团队而言成本是很高的,因此,Calabash 也从我们的待选 list 中删除。

最后的抉择

经过三轮筛选,目前摆在我们面前的有两个选择,Appium && Macaca,经过一段时间的对比调研,我们最终选择了 Macaca,主要考虑因素如下:

  1. 周边工具支持

    相对 Appium,Macaca 提供了更加全面的周边工具支持,这其中包含可持续集成平台 Reliable,元素查找工具 app-inspector,脚本录制工具 UI-Recorder 等。

    Reliable 持续集成平台可以帮助我们进行用例的管理以及任务的调度,对于 UI 自动化,只有当他成为一种规范化的程式定期的触发与执行,这样才能发挥他的作用,因此,一个持续集成系统对于自动化的长期发展是必不可少的,而 Appium 并没有提供这套系统,这意味着我们需要从无到有的搭建自己的一套持续集成环境,这个投入无疑也是巨大的。

    app-inspector 元素查找工具,极大的方便了控件的查找以及定位。

    UI-Recorder 脚本录制工具可以快速的通过录制得到脚本,方便新手入门。

    具体的使用可以参考官方网站,都有详细的介绍。

  2. 轻量

    从功能上来讲,Appium 较 Macaca 是有优势的,Appium 已经发展了多年,积累了很多经验,但是也造成了一些尾大不掉的毛病。以对安卓 API 版本的支持为例,Appium 支持所有的安卓 API 版本,而 Macaca 只支持 API>17(相当于 Android4.2 系统) 的版本,这个跟两者的底层原理有关,Macaca 对于安卓的支持是基于安卓 sdk 的 UIAutomator 框架,而这个框架是从 API 17 开始支持的,Appium 从最早的安卓开始,对于 API 17 以上的版本,Appium 与 Macaca 一样是基于 UIAutomator 的,对于 API 17 以下的版本,Appium 则基于老的 instrument,对于这部分的支持,还引入了 Selendroid。但是从应用的角度讲,Android7 已经发行,4.2 系统以下的设备占比不大,我们不希望为了支持这部分少量的机型而增加自己在自动化上的工作量。简单来讲,大而全的并不一定是最好的,关键是找到适合自己的。

  3. 社区活跃,中文文档丰富

    Macaca 是由阿里集团开源的框架,官方网站提供了中文版以及英文版双语文档,虽然对于开发者而言,阅读英文文档的能力是必须的,但是中文文档的提供无疑能帮助很多基础相对薄弱的同学快速入门。此外,Macaca 团队还提供了用于技术交流的微信群以及钉钉群,当遇到问题的时候可以方便的联系到主创团队的相关同学,这无疑也能给大家带来很大的方便。

  4. 平台更丰富

    虽然 Macaca 和 Appium 同时都支持 PC 与移动端,但是 Macaca 新增了对于 Electron 应用的支持,这个是其他框架都不具备的,虽然作为一个 Node.js 小白我没有接触过相关的应用,但是相信对 Electron 的开发者以及测试同学来说,这是一个不错的选择。

  5. API 的统一性

    研究过 Appium 的官方 API,以 java-client 为例,针对 iOS 和安卓,控件以及 Driver 等类别都根据平台不同而不一样,对于控件,有 AndroidElement,IOSElement,对于 Driver,有 AndroidDriver,IOSDriver,如果我们的用例要支持多平台,就需要处理多种平台不一致性,但 Macaca 从底层上就没有区分 iOS 与安卓,基本上除了各自系统特有的几个 API 以外都可以通过一个统一的 API 支持,这就方便了很多。

参考资料:

  1. Macaca 官网
  2. Appium testerHome 中文文档
  3. Selenium 官网
  4. Sendroid 官网
  5. Robotium 官网
  6. PhantomJs 官网
  7. Calabash 官网
  8. KARMA 官网

写在后面

上面总结了一下自己在调研并选择 UI 自动化框架中的一些思考,希望能给处于 UI 自动化调研初期的同学们一些帮助,其中很多选择是出于自身业务的需要,仅供参考,希望大家能结合自身业务的需要,找到适合自己的 UI 自动化框架。个人水平有限,以上观点有不对的地方还请大家多多指正与包涵。

附录

“Macaca 开源社区” 群的钉钉群号: 11775486(欢迎入群讨论,钉钉顶部搜索框搜索群号加入即可)

更多相关文章

UI 自动化框架调研总结
从无到有搭建 Macaca 环境 (forMac)
Macaca-Java 版入门指南
UI 自动化 Macaca-Java 版实践心得
UI 自动化利器 - 为你的应用自动添加控件 ID 探索
Macaca 基础原理浅析

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 16 条回复 时间 点赞
匿名 #26 · 2020年01月06日
Yinxl 回复

这个 macaca 集成了 uiautomator2+ atx 这个 watcher 的概念吗。就是服务端能同时自动化帮我们处理一些不可确定的弹层之类吗,我觉得这个对 UI 自动化很重要。解决稳定性很关键

中文文档链接打不开呢、

子非鱼 行业流行测试框架对比 中提及了此贴 03月18日 21:59
Yinxl UI 自动化框架调研总结 中提及了此贴 10月29日 16:05

求助,pc 桌面版基于 electronjs 的桌面版应用的 UI 页面中,需要使用到鼠标右键的操作,试问鼠标右键的模拟操作 macaca 如何实现呢,api 中未发现,借问求分享哦

Yinxl 从无到有搭建 Macaca 环境 (forMac) 中提及了此贴 06月28日 20:10
Yinxl UI 自动化 Macaca-Java 版实践心得 中提及了此贴 06月28日 20:08
Yinxl Macaca-Java 版入门指南 中提及了此贴 06月28日 20:08
Yinxl Macaca 基础原理浅析 中提及了此贴 06月28日 20:07
Yinxl #15 · 2017年06月08日 Author
oneHappiness 回复

可以用的 这个是钉钉群,在手机钉钉首页顶部的搜索框里搜索就可以加入了哈

11775486 这个群还能使用吗?找到一个 QQ 群,已经满员了,还有可以讨论的地方吗?

Yinxl Macaca 基础原理浅析 中提及了此贴 12月14日 11:11

#10 楼 @junhe 期待你们成功,到时记得分享哈

Yinxl #10 · 2016年12月08日 Author

#9 楼 @rotatecup 我们目前已经覆盖了自身业务产品的主流程,但是在持续集成上还有一些问题解决,包含安卓的兼容性问题的解决等,后面我们会将用例的执行和打包系统集成,在每次打包后自动触发,作为基础质量的保障,这个最终的成果后期会跟大家分享。😀

还有一个关键的问题在于,做这种基于 UI 的自动化,其实际的意义能有多大?框架本身无可厚非,技术学习也非常重要,但结合到项目实践中,通过这种 UI 的自动化,我们的投资产出比能有多少呢?如果楼主在某个 app 项目中持续做下去的话,最后希望能用这个项目的实际数据来为我们解惑。

#7 楼 @utopia 嗯嗯,是这样的,我说的持续集成主要是集中在用例的管理和任务调度系统这方面哈。Robotframework 这个忽略了不好意思,后面加上

Appium 如果使用纯 java 实现自动化,可以结合 java 单元测试框架集成,不是没有,是需要整合。
而且 robotframework 已经有 AppiumLibrary,调研时候不能漏掉

#3 楼 @kanchi240 目前这个 Macaca 也是不支持的哈,不过据说 初创团队的同学正在研发一种新的 webview 的自动化方案,能跳过这些限制,我们一起期待一下,哈哈。

#4 楼 @codeskyblue 这个可以去他们官方网站看看哈,参考资料里有链接

calabash 看起来挺好的样子,不知道支不支持直接用 REST 调用

问下 macaca 是否支持安卓平台下微信 H5 元素的定位?使用 appium,微信 H5 在微信浏览器内部就是一整个 webview,无法定位具体元素

pc 上的支持这个我没调研到,好像相关的资料都是针对移动端的,不好意思,我补上哈。另外,十分同意建立 macaca 生态以及核心 commiter 群的观点,这个建立好了,对阿里的依赖也就不强了,而且这也是健康发展必须要走的一条路。😀

appium 也支持 pc 端. 生态上比 macaca 更胜一筹. macaca 是新兴的项目, 解决了 appium 的一些痛点. 有阿里的支持会不错. 达峰他们维护的也很积极

但是阿里的开源也不容易, 很多项目都容易半途而废. 这个要做好能坚持下来还是任重道远的.

希望 macaca 能形成自己的生态和核心的 commiter 群, 这个挺关键, 确保以后离开了阿里仍然能发展起来.

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册