Macaca UI 自动化框架调研总结

Yinxl · December 07, 2016 · Last by 小萨 replied at January 06, 2020 · 10911 hits

导语

前面写了两篇文章介绍了个人基于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 条回复 时间 点赞

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

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

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

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

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

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

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

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

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

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

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

Yinxl #10 · December 08, 2016 作者

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

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

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

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

Yinxl #15 · June 08, 2017 作者
oneHappiness 回复

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

Yinxl Macaca 基础原理浅析 中提及了此贴 28 Jun 20:07
Yinxl Macaca-Java 版入门指南 中提及了此贴 28 Jun 20:08
Yinxl UI 自动化 Macaca-Java 版实践心得 中提及了此贴 28 Jun 20:08
Yinxl 从无到有搭建 Macaca 环境 (forMac) 中提及了此贴 28 Jun 20:10

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

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

中文文档链接打不开呢、

Yinxl 回复

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

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up