Macaca调研篇

简介:

一、业内相对流行的几款UI自动化框架


二、他们的区别在哪里?

三、有哪些可用的UI自动化框架?我们是如何选择的?

条件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并没有提供这套系统。目前外卖团队一直使用基于Jenkins的CI。而对于无CI的团队来讲,这意味着需要从无到有的搭建自己的一套持续集成环境,这个投入无疑也是巨大的。

    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应用的支持,这个是其他框架都不具备的。

  5. API的统一性

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

特别说明

虽然我们从开始就排除了Selenium,但是必须要特别说明的一点不管是Macaca还是Appium,他们在一定程度上都借鉴了Selenium的很多内容,包括对webdriver协议的支持,selenium grid的方式支持多机并行等,因此,对UI自动化感兴趣的同学,有必要先去了解一下Selenium的基础原理,这对于理解Macaca与Appium的底层原理都有很重要的帮助。

参考资料:

  1. Macaca官网
  2. Appium testerHome中文文档
  3. Selenium官网
  4. Sendroid官网
  5. Robotium官网
  6. PhantomJs官网
  7. Calabash官网
  8. KARMA官网
相关文章
|
API iOS开发 MacOS
关于electron升级调研的心得笔记
关于electron升级调研的心得笔记
414 0
关于electron升级调研的心得笔记
|
前端开发 关系型数据库 MySQL
开源云真机平台sonic-1.5.0版本部署实践
介绍演示部署的全过程: ● 安装docker、docker-compose ● 安装MySQL,创建sonic数据库 ● 安装jdk及Android SDK ● 部署sonic,注册agent ● 部署agent,连接使用手机
开源云真机平台sonic-1.5.0版本部署实践
|
Kubernetes 监控 JavaScript
官宣:SkyWalking NodeJS 0.5.1 补丁版发布!
官宣:SkyWalking NodeJS 0.5.1 补丁版发布!
224 0
官宣:SkyWalking NodeJS 0.5.1 补丁版发布!
|
JavaScript IDE 测试技术
Macaca 面向多端的自动化测试解决方案
Macaca 面向多端的自动化测试解决方案
603 0
Macaca 面向多端的自动化测试解决方案
|
数据采集 移动开发 JSON
基于NodeJS从零构建线上自动化打包工作流(H5-Dooring特别版)
NodeJS在前端领域正扮演着越越重要的地位,它不仅可以让前端工作者使用javascript编写后端代码,还能方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动,**非阻塞I/O **模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。
374 0
|
自然语言处理 JavaScript Java
面向用户端软件的测试解决方案Macaca
提供了自动化驱动,环境配套,周边工具,集成方案,旨在解决终端上的测试、自动化、性能等方面的问题。
面向用户端软件的测试解决方案Macaca
|
资源调度 Kubernetes Cloud Native
|
前端开发 JavaScript 开发者
[译] 2019 前端工具调研
自从去年结果公布,我们使用前端工具的习惯发生了什么变化?
629 0
|
JavaScript 前端开发 测试技术