|
有哪些可用的UI自动化框架?
业内相对流行的几款UI自动化框架
他们的区别在哪里?
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)这些几乎所有主流的语言,Ma
caca目前支持Js Java以及Python,也能基本满足需要,相比之下,Calabash只支持Ruby,这个对团队是有一
定的挑战的,因为我们的团队大家基本上以Java技术栈为主,如果采用Ruby,意味着所有的同学都要先学习一
下这门语言,这个成本对于我们这样的团队而言成本是很高的,因此,Calabash也从我们的待选list中删除。
最后的抉择
经过三轮筛选,目前摆在我们面前的有两个选择,Appium && Macaca,经过一段时间的对比调研,我们最终
选择了Macaca,主要考虑因素如下:
周边工具支持
相对Appium,Macaca提供了更加全面的周边工具支持,这其中包含可持续集成平台Reliable,元素查找工具app-i
nspector,脚本录制工具UI-Recorder等。
Reliable持续集成平台可以帮助我们进行用例的管理以及任务的调度,对于UI自动化,只有当他成为一种规范化
的程式定期的触发与执行,这样才能发挥他的作用,因此,一个持续集成系统对于自动化的长期发展是必不可
少的,而Appium并没有提供这套系统,这意味着我们需要从无到有的搭建自己的一套持续集成环境,这个投入
无疑也是巨大的。
app-inspector 元素查找工具,极大的方便了控件的查找以及定位。
UI-Recorder脚本录制工具可以快速的通过录制得到脚本,方便新手入门。
具体的使用可以参考官方网站,都有详细的介绍。
轻量
从功能上来讲,Appium较Macaca是有优势的,Appium已经发展了多年,积累了很多经验,但是也造成了一些
尾大不掉的毛病。以对安卓API版本的支持为例,Appium支持所有的安卓API版本,而Macaca只支持API>17(相
当于Android4.2系统)的版本,这个跟两者的底层原理有关,Macaca对于安卓的支持是基于安卓sdk的UIAutom
ator框架,而这个框架是从API 17开始支持的,Appium从最早的安卓开始,对于API 17以上的版本,Appium与
Macaca一样是基于UIAutomator的,对于API 17以下的版本,Appium则基于老的instrument,对于这部分的支持,
还引入了Selendroid。但是从应用的角度讲,Android7已经发行,4.2系统以下的设备占比不大,我们不希望为
了支持这部分少量的机型而增加自己在自动化上的工作量。简单来讲,大而全的并不一定是最好的,关键是找
到适合自己的。
社区活跃,中文文档丰富
Macaca是由阿里集团开源的框架,官方网站提供了中文版以及英文版双语文档,虽然对于开发者而言,阅读英
文文档的能力是必须的,但是中文文档的提供无疑能帮助很多基础相对薄弱的同学快速入门。此外,Macaca团
队还提供了用于技术交流的微信群以及钉钉群,当遇到问题的时候可以方便的联系到主创团队的相关同学,这
无疑也能给大家带来很大的方便。
平台更丰富
虽然Macaca和Appium同时都支持PC与移动端,但是Macaca新增了对于Electron应用的支持,这个是其他框架都
不具备的,虽然作为一个Node.js小白我没有接触过相关的应用,但是相信对Electron的开发者以及测试同学来
说,这是一个不错的选择。
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的底层原理都有很
重要的帮助。
|
|