浅谈安卓自动化的思路

一 前言 

什么是自动化测试?

把以人为驱动的测试行为转化为机器执行的一种过程,即模拟手工测试步骤,

通过执行测试脚本自动地测试软件,自动地完成软件的单元测试、功能测试、负载测试或性能测试等全部工作。

自动化测试应该从提高工作效率和产品质量的根本目标出发,而不是为了自动化而自动化。

 

测试用例(test case):

是为了特定测试目的而设计一个特定的使用实例或场景,包括测试条件、测试数据及与之相关的测试规程或操作过程。

测试用例也可以被称为有效地发现软件缺陷的最小测试执行单元。

 

测试脚本(test script):是进行自动化测试时所编写的、可执行的一种程序,以实现测试用例的执行过程。

 

优越性: 高效率 准确可靠 复用性 可以完成手工测试无法完成的测试,适合负载测试、性能测试、回归测试。

缺   点: 只能发现软件系统中30%的错误,70%的错误要依靠手工测试来发现。

 

黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。

在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试。

它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。

黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。

 

白盒测试 又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。

白盒测试是一种测试用例设计方法,盒子指的是被测试的软件

白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。"

白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。

在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。

白盒测试工具是对源代码进行的测试。

 

二 测试工具分析

现在,已经有大量的Android自动化测试架构或工具可供我们使用,

其中包括:Activity Instrumentation,MonkeyRunner,Robotium,UiAutomator。

还有可以实现跨平台测试的Appium

 

单元测试

单元测试就是在开发的是时候,一步步的,一方法为单位的进行测试。

比如说你写了一个类,这个类呢有很多的方法,你想知道你写的这个方法到底对不对,那么你就可以使用单元测试框架进行测试。

它也可以被用作快速检验新建工程或进行冒烟测试。

始终,单元测试是作为一种有效的、系统的检验应用程序各功能执行的方式。

 

Android SDK支持JUnit的自动化单元测试,很多测试工具都是复用Junit测试框架。

单元测试可以为逻辑测试,功能测试和用户界面测试等,不再是专门手动测试移动应用。

 

Android提供了基于JUnit测试框架的测试API来书写测试用例和测试程序。

另外,Android还提供了强大的Instrumentation框架,允许测试用例访问程序的状态及运行时对象。

 

第一,  就是java程序员最为熟悉和常用的JUnit,,

我们需要在运行单元测试时,一定要 用JDK来运行,利用java命令来启动JUnit的某个Runner。

如果是用Eclipse的话,可以在Run Configuration里新建一个JUnit。但是一定要记得在Classpath选项卡里将Bootstrap Entries中的Android Library改成JRE,并且添加junit.jar。

具体的设置可以参考:http://developer.android.com/guide/appendix/faq/troubleshooting.html#addjunit

这种方法运行的JUnit运行在JDK之上的,而不是android,所以,只能测试一些和android无关的东西,比如业务逻辑,数据封装,数值计算等等。并不能测试android api。

android中可利用的主要测试API。继承自JUnit的TestCase,不能使用Instrumentation框架。

 

第二,  采用Instrumentation测试框架。

Android 测试环境的核心是一个Instrumentation框架,在这个框架下,你的测试应用程序可以精确控制应用程序。

使用Instrumentation, 你可以在主程序启动之前,创建模拟的系统对象,如Context;控制应用程序的多个生命周期;发送UI事件给应用程序;在执行期间检查程序状态。

Instrumentation框架通过将主程序和测试程序运行在同一个进程来实现这些功能。

 

Instrumentation implementation通过的AndroidManifest.xml中的标签进行描述。

android.app.instrumentaion类分析请参考

http://blog.csdn.net/zhaoweixing1989/article/details/8532940

 

你可以将Instrumentation理解为一种没有图形界面的,具有启动能力的,用于监控其他类(用Target Package声明)的工具类。

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

参考:http://www.cnblogs.com/carbs/archive/2013/01/12/2857596.html

 

ActivityInstrumentationTestCase2 用来测试单个的Activity,被测试的Activity可以使用InstrumentationTestCase.launchActivity 来启动,然后你能够直接操作被测试的Activity。

 

局限性:只能满足单个活动的功能测试。

 

2  Robotium

Robotium是android测试中一个简单而又强大的工具。

说它简单,是因为Robotium是基于Android测试框架InstrumentationTestCase2进行的2次封装,把一些基本操作又简化了一遍。

通过反射等手段,调用系统隐藏的功能,实现instrumentation无法实现的功能。

 

它的文档只有一个Solo类,而且配置步骤是固定的几步。对程序上的每一个按钮,文本控件,图像,等都可以捕捉到,既可以使用按钮显示的名字进行点击,也可以使用坐标进行点击。

 

优点:主要针对某一个APK进行自动化测试,APK可以有源码,也可以没有源码,功能强大;在黑盒测试里面比monekyrunner效率更好,

缺点:针对APK操作,而且需要对APK重新签名(有工具),因此操作相对复杂;

          需要第三方厂商提供debug版本或者将发布的版本重新打包签名,才能将测试用例注入到待测试应用的进程里面。

 

3 Monkey

为支撑黑盒自动化测试,Android SDK提供了Money和MonkeyRunner两个测试工具。

Monkey是一个命令行工具,可以运行在模拟器里或实际设备中,它是一种轻量级的性能测试工具。

它向系统发送伪随机的事件流,模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。

 

除了生成随机的事件序列,也支持接收脚本的解释执行命令。

可以在monkey的 --help里面查到。但官方没有。

不足:

缺少必要的条件判断等命令,难以在功能测试上有所作为。

将其作为生成随机事件的工具,测试应用的健壮性。

 

4 MonkeyRunner

MonkeyRunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。

通过MonkeyRunne,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,

向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。

MonkeyRunner工具的主要设计目的是用于测试功能框架水平上的应用程序和设备,或用于运行单元测试套件。

与monkey的区别在工作站上通过API定义的特定命令和事件控制设备或模拟器。

 

优点:操作最为简单,可以录制测试脚本,可视化操作;

缺点:主要生成坐标的自动化操作,移植性不强,虽然有python和Java类库的支持,但是自身提供的API有限,需要通过插件来扩展其功能,功能最为局限

 

5 Appium

Google在sdk4.0以后提供了一个自动化解决方案uiautomator:

优点:可以跨应用了;这可是亲生的;

缺点:必须sdk4.0以上版本;要想实现的好,最好有开发配合;java项目编译为jar后需要push到手机才能运行,

 

Appium 是一个开源、免费的移动端自动化测试框架,可以用来测试原生和混合移动应用,

同时支持测试多种平台(Ios、Android、FirefoxOS)下应用,是跨平台的,可以用在osx,windows以及linux桌面系统上,

底层是采用 WebDriver JSON Wire 协议去实现的。

由SauceLabs支持,一家业界领先的测试产品公司, 有成熟的企业测试解决方案。

 

国内 http://testerhome.com/

官网:http://appium.io/

 

为什么选择appium ?

1.    你不需要以任何方式重新编译或者修改你的app,就可以在所有的平台上使用标准的自动化APIs

2.    你可以用你喜欢的开发工具使用任何 WebDriver 兼容的语言来编写测试用例.比如 Java, Objective-C, JavaScript with Node.js (in both callback and yield-basedflavours), PHP, Python, Ruby, C#, Clojure, 或者 Perl 可以使用标准的Selenium WebDriver API和特定语言的客户端库.

3.    你可以使用任何测试框架.

依托 WebDriver 意味着你可以押宝在一个已经成为事实上标准的独立,自由和开放的协议.而不会被限制在任何的专利中

如果在没有使用Appium的情况,你使用了Apple的UIAutomation库就只能通过Javascript,并且只能通过Instruments application插桩应用来运行你的测试. 同样的,在Google的UiAutomator体系下,你只能用Java写你的测试案例. Appium最终开启了跨平台原生移动自动化的可能.

工作原理

Appium通过多种原生自动化框架来提供基于Selenium的 WebDriver JSON wire protocolapi

Appium驱动Apple的UIAutomation库提供IOS支持. UIAutomation基于Dan Cuellar’s

Android支持上, 在新版本的Android使用了Uiautomator框架,老版本的android上使用了Selendroid

FirefoxOS的支持依赖一个基于Gecko平台并且兼容WebDriver的自动化驱动Marionette,不过暂不翻译了.因为暂时用不到

 

Android

支持版本: android 2.3 平台及以上

 android 4.2 平台及以上通过Appium自有的 UiAutomator类 库支持. 默认在自动化后台。

 从android 2.3 到 4.3 平台 ,Appium是通过绑定Selendroid,实 现自动化测试的,

windows

如果你在windows上安装appium,你没法使用预编译专用于OS X的.app文件,你也将不能测试IOS apps,

因为appium依赖OS X专用的库来支持IOS测试。这意味着你只能通过在mac上来运行IOS的app测试。这点限制挺大。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值