导语

前面写了两篇文章介绍了个人基于 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 基础原理浅析


↙↙↙阅读原文可查看相关链接,并与作者交流