摘要

  众所周知,自动化测试可以一定程度上减轻测试人员负担,提高测试效率,并且通过自动化还可以实现可靠性测试和性能测试。对于移动客户端测试而言,如果我们能够让手机自动运行应用程序来帮助我们检测功能的正确性,会不会很酷?有道测试组对一些热门的手机自动化工具进行了调研,并选择了一些工具进行实际的使用。本文将会结合实际工作,对移动客户端(Android&iOS)GUI自动化的工具调研和实现进行介绍。

  Android

  工具

  Android APIs提供的instrumentation类可以初始化Android应用程序代码,允许你监控应用程序的系统交互,配合KeyEvent、MotionEvent类,发送用户事件,进而实现GUI 层的自动化。测试程序需要继承ActivityInstrumentationTestCase2来实现自动化。

  为了方便编写自动化测试用例,我们需要对ActivityInstrumentationTestCase2进行扩展。业界也已经有一些成熟的自动化工具,诸如Robotium、Athrun、NativeDriver、MonkeyRunner等。我们需要针对自身产品的需求,从中选取一款合适的工具来实现自动化。对于移动客户端GUI的自动化而言,需要保证选取的工具有以下几点特性:

  1、工具开源,易于扩展。

  2、脚本编写简洁,维护成本低。

  3、满足客户端的自动化需求。

  4、便与校验结果的正确性。

  5、可用于持续集成。

  表1列出了这四款工具的区别:

表1 Android自动化工具对比

  MonkeyRunner通过编写Python脚本来实现自动化,结果的验证是通过截屏比对图片来实现,验证方式不够灵活,不建议采用。

  NativeDriver 是WebDriver 接口的一种实现,使用移动客户端原生UI而不是浏览器UI(Selenium)的自动化测试工具。类似于selenium RC的方式来运行测试程序,对于熟悉WebDriver的用户,上手会很快。从表1可以看出该工具也可以满足我们的自动化需求,但在调研初期,该工具提供的接口较少,没法满足测试需求,而今的完善程度也已经很高了。没有使用该工具可以认为是历史原因吧。

  Robotium被大家所熟知,基于instrumentation实现,提供的接口可以满足大部分自动化需求。但不支持webview,而有道词典的查词结果展示恰好使用的是webview组件,该模块没有办法通过该工具来实现自动化。

  Athrun的实现和Robotium类似,提供的接口也很多,并且支持webview,也可实现持续集成。对于我们的产品而言,满足自动化的需求。由于工具开源,在今后需求不满足的时候我们也可以在该工具的基础上做一些封装。所以终选择了Athrun来实现笔记和词典的GUI自动化。

  实例

  和写Android应用类似,首先要建立一个Android Test Project ,指定被测试的Android Project。如果没有应用源代码,也可以在测试程序的AndroidManifest.xml文件内,修改<instrumentation> 标签下targetPackage为我们要测试的应用程序的package。之后导入framework.jar,可以开始编写自动化脚本了。图1是有道云笔记Android端登录模块的自动化用例:

图1 Android 自动化用例