当前Android App自动化测试领域有众多测试框架,我们来了解一下。
(1)Instrumentation
Instrumentation是Android自带的一个测试框架,是很多测试框架的基础,可以在同一个进程中加载被测组件。它有很多丰富的高层封装,你可以使用基于Instrumentation的其他框架,避免过多二次开发。但Instrumentation不支持跨App使用,基于Instrumentation开发的框架都“继承”了这个缺点。
(2)Robotium
Robotium是基于Instrumentation框架开发的一个更强的框架。该框架对常用的操作进行了封装。
优点:容易让使用者在短时间内编写出测试脚本,易用性高;支持自动跟随当前Activity;由于运行时会绑定到图形用户界面(Graphical User Interface,GUI)组件,所以相比Appium,它测试时执行速度更快,功能更强大;即使用户不访问代码或不了解App实现,也可以使用;支持Activity、Dialog、Toast、Menu、ContextMenu和其他Android SDK控件。
缺点:不能测试Web组件;在旧设备上测试执行速度会变得很慢;不支持iOS设备;没有内置的记录和回放功能。
(3)UIAutomator
UIAutomator是由Google提供的测试框架,它提供了Android Native App和手游App的高级UI测试。这是一个包含API的Java库,可以用来创建功能性UI测试,还有运行测试的执行引擎。该库自带Android SDK。
优点:在访问不同的进程时,会给JUnit测试案例特权;测试库由Google社区支持和维护。
缺点:仅支持Android 4.1(API level—16)及以上版本;不支持脚本记录,不支持Web视图,仅支持使用Java,因此很难和使用Ruby的Cucumber结合,如想支持行为驱动开发(Behavior Driven Development,BDD)框架,建议使用Java自己的BDD框架,例如JBehave。
(4)Espresso
Espresso是Google的开源自动化测试框架。相对于Robotium和UIAutomator,它的特点是规模更小、更简洁,API更加精确,使用者编写测试代码更简单,容易快速上手。因为它是基于Instrumentation的,所以不能跨App使用。
(5)Calabash
Calabash是一个适用于iOS和Android设备的跨平台App测试框架,可用来测试屏幕截图、手势和实际功能代码。Calabash开源并支持Cucumber,Cucumber能让用户用自然的英语表述App的行为,实现BDD。Cucumber中的所有语句都是使用Ruby定义的。
优点:有大型社区支持;列表项简单,有类似英语表述的测试语句,支持在屏幕上能够实现的所有动作,如滑动、缩放、旋转、敲击等;支持跨平台开发(同样的代码在Android和iOS设备中都适用)。
缺点:某一步骤测试失败后,将跳过所有的后续步骤,这可能会导致错过更严重的产品问题;测试耗费时间,因为它总是默认从安装App开始;需要将Calabash框架安装在iOS的.ipa文件中,因此测试人员必须要有iOS App的源码;除了Ruby,对其他语言不友好。
(6)Appium
Appium是一个开源、跨平台的自动化测试工具,支持iOS、Android和Firefox OS平台。通过Appium,开发者无须重新编译App或者做任何调整,就可以测试App,可以通过测试代码访问后端API和数据库等。它是通过驱动iOS的UIAutomation和Android的UIAutomator框架来实现跨平台支持的,同时绑定了Selenium WebDriver用于支持对早期Android平台的测试。开发者可以使用Selenium WebDriver兼容的任何语言编写测试脚本,如Java、Objective-C、JavaScript、PHP、Python、Ruby、C#、Clojure和Perl语言等。
(7)其他
其他测试框架还有用于压力测试的Monkey,用于兼容性测试的CTS。
继承关系决定了有些框架的先天优势或先天不足,各个测试框架的继承关系如下。基于Instrumentation的测试框架,比如Espresso、Robotium、Selendroid等,都不支持跨App使用。若自动化测试中有跨App操作,可以通过二次开发或者结合UIAutomator实现。支持BDD的自动化测试框架比较少,可以在Calabash、RoboSpock及JBehave中选择。若想同时支持Android和iOS,可选框架有Appium、Calabash或Athrun。
笔者在选择框架时更看重以下3点:
● 支持多种开发语言,尤其是支持Python,方便测试人员上手;
● 支持跨平台开发,需要同时支持Android和iOS,方便覆盖两类终端;
● 支持跨App使用,方便开展跨App测试。
因此,本书将选择Appium框架作为Android App自动化测试工具进行后续讲解。