分享

android自动化测试相关资料收集(未整理)

 十三笑兮兮 2013-12-25

 android自动化测试 

android自动化测试工具简介

现在,已经有大量的Android自动化测试架构或工具可供我们使用,其中包括:Activity Instrumentation, DroidPilot,MonkeyRunner, Robotium, 以及Robolectric。另外LessPainful也提供服务来进行真实设备上的自动化测试。

  Android自身提供了对instrumentation测试的基本支持,其中之一就是位于android.test包内的 ActivityInstrumentationTestCase2类,它扩展了JUnitTestCase类来提供Android activities的功能测试。在应用测试中,每一个activity首先会被Instrumentation初始化,然后再加载到Android模拟 器或设备的Dalvik虚拟机中来执行。

      一个新出android自动化测试工具,DroidPilot是一个自动化测试工具。它可以针对于Android平台的应用程序进行测试脚本编辑、自动回放、结果检 查、报告输出等操作,以此来缩短回归测试的时间,提升项目整体进度。测试脚本不仅可以运行于模拟器,更可以同时运行于多台移动设备,这样更能凸显测试结果 的真实性和可比性。

  Android SDK自带一个测试工具MonkeyRunner,它提供的API和执行环境可以运行Python语言编写的测试代码。它提供API来连接设备,安装/ 载应用,运行应用,截屏,比对图片来判断特定命令执行后的屏幕是否包含预期信息,以及运行对应用的测试。MonkeyRunner使用 ActivityInstrumentationTestCase2, ProviderTestCaseServiceTestCasek, SingleLaunchActivityTestCase及其他类来定义测试用例,并使用InstrumentationTestRunner类来运行 测试。

  Robotium是另一种通过InstrumentationTestRunner来完成Android交互式测试的架构,它横跨多个 activities,支持功能测试,系统测试和接收测试。Robotium支持ActivitiesDialogsToastsMenus Context Menus甚至Honeycomb,并且它可以同MavenAnt集成来完成持续集成测试。Robotium被称之为针对Android应用的又一个 Selenium

  Robolectric另辟蹊径,它并不依赖于Android提供的测试功能,它使用了shadow objects并且运行测试于普通的工作站/服务器JVM,不像模拟器或设备需要dexingAndroid dex编译器将类文件编译成Android设备上的Dalvik VM使用的格式),打包,部署和运行的过程,大大减少了测试执行的时间。Pivotal实验室声称使用Robolectric可以在28秒内运行1047 个测试。

  LessPainfulAndroid测试又推进了一步,它提供了一个多设备平台自动化测试的服务。用户上传应用(*.apk)和用 Cucumber(一种业务相关的DSL)编写的测试文件,选择测试运行需要的设备配置,最后测试将自动执行并生成测试报告。它支持的设备包括 Garmin Asus,几款HTCLGSamsung GalaxySony XperiaMotorola Motodefy

 

一、首先说说手机自动化测试的原理
1
、手机自动化测试的原理为PC上一个控制端(测试工具)与手机上的一个agent端,通过串口、USB或者无线方式将PC机终端相连,然后应用测试工具向手机发送请求或者命令,手机收到命令或者请求后,交给agent端解析,然后agent将这些解析的命令下发给手机的各个功能模块所能识别的命令,调用那些功能模块模拟操作。完成这些操作后,手机会返回一些信息,agent可以抓取这些信息,然后传回给PC端,这样就完成了一个完整的手机自动化测试
2
、关键点在于agent,有的公司是向自己的手机终端的软件功能模块中植入测试程序响应代码,有的公司可以利用MMI_Command的方式来控制手机终端;原理就是给手机提供一个响应的接口。
3
、而对于PC控制端,这个测试脚本用各种编程语言都可以,看如何定义
4
、而又的自动化测试设计成录制的机制,说通俗点,就是记录手工操作的键盘信息或者LCD的操作信息(LCD需要用到智能识别机制)
5
、自动化测试框架的搭建方法是通用的,你需要有一套自己的测试框架才能保证自动化测试的顺利开展。
二、Android自动化测试方向:
1
CTSCTS 测试基于Android instrumentation 测试, 其又基于JUnit 测试。说白了, CTS 就是一堆单元测试用例。这也是Java 语言的擅长部分。
2
Monkey工具,MonkeyAndroid中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。
3
ASEASE 意思为Android 脚本环境, 即我们可以通过脚本(比如Python)调用Android 的功能,从而定制一些测试。比如打电话,发短信,浏览网页,等。我们可以扩充它的APIJava 部分), 并用python 脚本调用这些API, 从而实现丰富的测试功能。用于API 部分可以访问到Android 全部API, python 又能灵活部署测试,所以ASE 的扩展性非常好。
4
Robotium,该工具用于黑盒的自动化测试。可以在有源码或者只有APK 的情况下对目标应用
进行测试。Robotimu 提供了模仿用户操作行为的API,比如在某个控件上点击,输入Text
等等。(推举你可以研究一下这个工具,开源的,我有资料)

基于优秀的图像对比库opencv测试工具测试脚本使用Python编写,非常强大。如果你的app没有源码,可以选择它;或者你想做系统测试(app的测试),也可以选择它。其它的还是用下面说的那些个吧。

  我通过其核心包sikuli-script.jar实现了androidsikuli化,暂时不打算开源。其实原理挺简单的,认真看过sikuli源码的应该都能写出来。

  看lz的意思应该只是想问应用层的,我来说点应用层的

  先说说开源的吧:

  Robotium

  Monkeyrunner

  Robolectric

  CTS

  还有个新兴的测试工具,以前在GitHub看到,现在找不到了,好像是BDD类型的语法;现在还不成熟。

  另外基于web的测试也有基于Selenium Webdriver Android WebDriver

  有两种:

  基于Remote Server的:官方提供了java接口的,但是Python版的官方里面却没有。我非常喜欢Python,所以自己实现了并且开源到了GitHubhttps://github.com/truebit... 有问题大家可以提到上面

  基于Instrumentation的:已经在Android SDK r14里面可以安装了

  不开源的就多了,不过我见过的一般是以下几种思路:

  1. 基于Android Java Instrumentation框架:

  基于Robotium,比如bitbar的产品:http:///products

  基于Instrumentation,那就海了去了,很多公司自家写的工具都基于这个;另外Robotium就是基于这个的

  2. 基于Android lib层的各种命令,比如sendevent,getevent, monkey, service这些,然后用各种语言封装

  MonkeyRunner还是很有前景的,Google自己弄的。现在最新的dev版本已经有支持UIid操作的EasyMonkey了。可以git clone git://android.kernel.org/platform...看看

 

原文转自:http://www.

 

Android 下的自动化测试工具总结

测试手段1 CTS (Compatibility Test Suits)

用来确保某设备符合 Android 兼容性规范。原来想扩充它,不是正道。

 

测试手段2 Monkey

1    应用程序的开发者可以测试自己应用的鲁棒性。

2    设备制造商可以使用猴子对自己的测试施行压力测试。看设备能坚持多久。

猴子测试即可以针对全局,也可以正对某个局部(某个 Category, package等等)。

执行简单,效果明显。

 

测试手段3MonkeyRunner

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

2)     用于多设备控制,功能测试,回归测试,可扩展的自动化。

3  monkey强大,任何你在模拟器/设备中能干的事情,MonkeyRunner都能干,而且还可以记录和回放。

 

测试手段4: ASE (Android Script Environment)

ASE 意思为 Android 脚本环境,即我们可以通过脚本(比如Python)调用 Android 的功能,从而定制一些测试。比如打电话,发短信,浏览网页,等。

我们可以扩充它的APIJava 部分)并用python 脚本调用这些API,  从而实现丰富的测试功能。

用于API 部分可以访问到Android全部API, python又能灵活部署测试,所以 ASE 的扩展性非常好。

 

测试手段5: Robotium

该工具用于黑盒的自动化测试。可以在有源码或者只有APK的情况下对目标应用进行测试。

Robotimu 提供了模仿用户操作行为的API,比如在某个控件上点击,输入 Text 等等。

 

测试手段6:单元测试

Android 本身带有很多单元测试例子,我们可以按需要模仿它们,针对某个应用进行单元测试。

注意 Android Instrument机制功能非常强大,可以测试 UI.

 

测试手段7Smart Robot (东舟软件)

SmartRobot提供了录制产生测试用例的方式,用户操作手机即可产生用例,不需要逐行去编写用例脚本。测试用例与设备分辨率无关,与手机型号无关,同一用例可以在不同型号手机、不同分辨率手机下执行。

Smart Robot的测试用例基于Android Instrumentation

Smart Robot是一款既能基于控件又能基于手机图像的自动化测试软件

SmartRobot不仅提供了基于Android界面控件的录制和回放机制,而且提供了基于界面图像的用例方式,二者兼而有之。即SmartRobot既可以做到验证界面控件的细节,也可以做到验证和比对手机界面图像。

 

 

总结

对于 CTS/Monkey, 我们不需要开发,只要执行测试就可以了。

对于 ASE,  我们可以扩充它的现有API(Java), Python调用这些API实现丰富的测试功能。

Robotium 模仿普通用户行为,可以试着把一些原来由测试工程师做的测试变成Robotium自动化实现。

 

SmartRobot

http://wenku.baidu.com/link?url=ggOiAtIRVWbkMyqb-C5LBy-YvjJF4uHeUv5e9H72eQ1viztL2cSSnEASHb6hw2IDZO0f5D2TAB93A_BmOOwbB7FTYcTj-IWY5EYNqi9_0te

 

Android应用自动化测试——理论、工具和实践(上)

  摘要

  桌面应用程序与浏览器端的自动化测试都已经历了十年的发展,无论是从工具上还是项目管理 法论上都已经趋于成熟。而移动设备端应用程序的自动化测试近两年才刚起步,似乎一切尚处于探讨与研究阶段。但我们似乎已经看到其爆炸性的需求增长势头。可 以从这两方面着眼分析:其一,移动应用从数量上和逻辑复杂程度上的增长,以及产品发布周期的紧缩,使得快速回归测试迫在眉睫;其二,安卓系统的开放性造成 硬件厂商百家争鸣的局面,设备款式之多,迫使移动应用的兼容性测试提上日程。纵观当前智能手机 大主流阵营iPhoneAndroid,似乎安卓应用开发商与设备制造商更能体会兼容性测试的切肤之痛。鉴于此,并结合传统桌面系统上的自动化测试经 验,我们在此探讨基于Android平台应用程序的关键字驱动自动化测试的可能性,并摸索一条适合在移动应用开发过程日新月异的现实情况中切实有效的实现 和实施自动化测试的路子。

  理论基础

  在传统的桌面应用软件与浏览器端应用的自动化测试领域,已经有相当成熟的工具可供用户选择,例如商业工具HP QTPIBM Robot/RFTBorland SilkTest等;开源工具如SeleniumWatir等。剖析这些工具,它们似乎都有着相同的功能结构:

  对被测应用界面对象/界面元素的捕获与识别,并对其进行管理与操作;

  对于测试脚本的编辑功能与语法解析功能;

  对于测试数据的组织与管理;

  对于脚本执行结果的分析与输出;

  如果细说,还可以牵扯到如脚本录制功能,插件管理功能,与测试管理工具、缺陷跟踪工具的整合等内容,涵盖面相当广泛。但所有这些都是为了一个目的:模拟测试人员行为,达到功能性回归测试的目的。本文尝试从以下最关键的几点来分析自动化测试工具的核心构成部分。

  1、关键字驱动

  关键字测试的主要思路是以面向对象的方式来管理被测应用的对象、对象的相关操作、测试数据以及这些测试数据之间的组合关系。关键字驱动是自动化测试中行之有效的方式,它可以帮助测试工程师更方便的维护测试脚本、构建复杂的业务逻辑测试用例、并节省手工测试的执行时间(尤其是在回归测试阶段)。关键字驱动主要由以下三种元素构成:

  1)被测对象,即被测应用界面上的元素;

  2)针对这些对象的操作,如点击(按钮)、填充(文字)、选择(单选框/多选框);

  3)以及基于这些操作的数值;

  上述三种元素可以描述为以下表格:

对象

操作

数值

文本框

输入

文本值

按钮

点击

选择框

选择

选项值

  或者以面向对象的文法表述为:

  对象.操作(值)

  该语句是关键字驱动脚本的构成基础。

  2、对象库

  对象库是用于储存被测应用程序界面对象(界面元素)的地方。它是关键字驱动测试工具的关键点。有了它,用户可以更容易的维护被测对象、更快速的构建测试脚本。它是如何做到这些的呢?让我们看看下面的结构:

http://www./attachments/2012/08/346836_2012083010350313WjI.jpg

 

 

 实践

  探讨完上述关于不同测试工具的使用特点,更准确的说,是安卓应用自动化测试工具的特点,我们不妨来实践(其实是模拟)一个移动应用的测试过程。这里我们选用API Demo作为被测应用,选用DroidPilot作为测试工具。

  分析被测应用

  被测应用API Demo使用标准Android SDK作为开发控件,且被测应用未加扰码,因此,界面上所有元素可以被DroidPilot识别。

   对于一些非标准Android SDK控件开发的应用,这里有两种情况:一种情况控件完全由自己开发,如果是这种情况,DroidPilot完全无法识别对象;另一种情况是在标准控件基 础上做了二次开发,这样的话DroidPilot只能识别到原生SDK那一层。对于这两种情况,都可以联系DroidPilot开发团队为非标准控件度身 定制专属插件,用于识别被测控件。

  对于扰码问题,正如上述《前置条件》章节所描述的,DroidPilot本身是无能为力的,只能请开发团队去掉扰码,打包一个不加扰码的测试包给测试团队使用了。

  设计测试用例

  这里我们假设一个测试用例是进入\App\Activity\Animation\Fade in\界面,对界面的元素(按钮、文本框、多选框、单选框、下拉列表)进行操作,并验证文本框的文字是否符合我的预期结果。测试步骤如下:

测试用例1 -验证\App\Activity\Animation\Fade in\界面元素

前置条件:API Demo已经启动,停留在起始页

步骤

动作

期望结果

1

点击App

 

 

点击Activity

 

 

点击Animation

 

 

点击Fade in

 

 

在文本框输入"put your text here"

 

 

勾选Checkbox1

 

 

向下滑动一次屏幕

 

 

点击下拉框

 

 

勾选Venus

 

 

检查文本框

文字="textColorPrimary"

  开发测试脚本

  先使用DroidPilot脚本编辑工具抓取各个屏幕的对象,然后把这些对象选入脚本设计器,按照测试用例的顺序来排列,如下图:

http://www./attachments/2012/08/346836_201208301049371KOlJ.jpg

 

 

 如下图,传统模式,测试工程师可能在第一轮测试才有一次Full Test,在后续的回归测试中,可能只能做到部分回归。

http://www./attachments/2012/08/346836_201208301049421w4IM.jpg

  如果引入自动化测试工程师,同步开发测试脚本(理想情况,每个应用自动化比率达到70%~80%,整体自动化比率达到60%~70%),有可能使得回归测试比率有所提高。

http://www./attachments/2012/08/346836_201208301049461Bza2.jpg

  从零做起

  既然如此,何不从现在开始,从零开始,在项目中尝试引入自动化测试,哪怕只是抽调部分人力着手部分应用的自动化测试,至少可以达到Daily Build Smoke Test的效果。再者,移动应用自动化测试行业正处于起步阶段,此时介入也不失为一个好时机。

  结论

  回顾上述讨论的内容,我们设想能在移动应用自动化测试领域延续桌面系统自动化测试的成功经验,从理论基础、工具支 持、以及后续项目管理方面都做了一番探讨。尽管主要还是局限于安卓应用的自动化方面,对于iOS提及较少。不难理解,iOS本身支持的机型有限,对于设备 兼容性测试并不是重点关注的内容。而在功能性回归测试方面,它本身也有相关工具支持。至于像Blackberry之类的平台,因为本身并没有呈现爆炸性的 应用增长,所以也没有列在讨论范围。所以,本文仍以安卓平台作为自动化测试的突破口,希望从中能结合市面上的一些商用工具,尝试实践以关键字驱动为基 础的自动化测试,而非原始的以坐标点为基础的屏幕点击测试。对于开源工具也没有提及,原因是考虑到像RobotiumMonkeyRunner之类 的流行工具可能更贴近于开发工程师使用,而非更贴近于测试工程师。所以,我们希望在上述的讨论中能带给读者在测试项目中新的启发。

安卓应用自动化测试工具汇总

接下来我们尝试从以下几个方面了解该工具:

  [b]脚本编辑器[/b]

  它有两种方式:一、纯Web的脚本制作界面;二、近年新开发的QTP插件;

  [b]脚本语言[/b]

  Web端的是基于关键字的脚本设计器"ScriptOnce";如果用QTP插件,则是VBScript.

  [b]是否支持录制脚本[/b]

  Web端是鼠标拖拽的方式制作脚本;QTP插件是否可以支持录制就不清楚了。

  [b]结果验证[/b]

  通过对比界面图像来验证测试结果

  [b]价格[/b]

  Web端对于设备的使用是按小时收费。QTP插件的费用还不清楚。相信不会比QTP贵吧~ :-

  安卓应用自动化测试工具之二 - TestDroid

  背景:芬兰公司,近两年刚起步,去年年底开始做云平台。

  突出特点:测试脚本可以录制,并转成Robotium/MonkeyRunner脚本。

  接下来我们尝试从以下几个方面了解该工具:

  [b]脚本编辑器[/b]

  其实就是Eclipse插件。

  [b]是否支持录制脚本 & 脚本语言[/b]

  可以用录制的方式产生脚本,并生成Robotium or MonkeyRunner的脚本语言。但这个前提是一定要有被测应用的源代码。官方文档虽然说不用源码也能测,只是抓不到R-Class级别的对象。但笔者试了一下没有源码的apk,好像文本框的顺序还无法辨认。

  [b]结果检查[/b]

  貌似可以写判断语句。

  [b]价格[/b]

  USD99/Month,买够一年还可以打5折。云端价格暂未公开。

  安卓应用自动化测试工具之三 - DroidPilot

  该工具的官方网址:

  背景:深圳公司,今年刚起步。

  突出特点:抓取对象能力较强;工具仿制QTP,易于测试人员上手。

  接下来我们尝试从以下几个方面了解该工具:

  [b]脚本编辑器 & 脚本语言[/b]

  自己写的脚本编辑器,仿QTP使用VBScript语言。

  [b]是否支持录制脚本[/b]

  使用脚本设计器,通过抓取的对象设计脚本,然后把设计好的脚本转换成VBScript进行深加工。据开发团队声称,测试工程师在制作脚本的时候录制的效率不一定有制作的效率高,且也不一定灵活。不过他们表明会在后续版本开发录制功能。

  [b]结果检查[/b]

  有类似QTP的检查点语句Checkpoint; 也可以写条件判断语句对比属性值。

  [b]价格[/b]

  未定,目前开放试用下载,试用期限不够的话还可以跟他们谈。

  安卓应用自动化测试工具之四 - LessPainful

  该工具的官方网址:

  背景:丹麦公司,这两年刚起步。

  突出特点:支持iOS & Android;只需提供被测apk和脚本到他们的网站即可测试;脚本很特别。

  接下来我们尝试从以下几个方面了解该工具:

  [b]脚本语言[/b]

  脚本语言是仿真语言,很有意思。

  [b]是否支持录制脚本[/b]

  测试工程师就像写测试用例那样写脚本,都不需要录制功能了。

  [b]结果检查[/b]

  不清楚,只是说把写好的脚本提交给他们,就可以在几分钟之内收到结果。脚本中貌似没有检查点之类的语法。

  [b]价格[/b]

  按月收费。

  安卓应用自动化测试工具之五 - DeviceAnywhere

  背景:美国公司,做了好几年了。

  突出特点:号称支持所有平台;与测试管理工具整合。

  接下来我们尝试从以下几个方面了解该工具:

  [b]脚本编辑器 & 脚本语言[/b]

  其实是测试流程设计器,用鼠标拖拽的方式设计测试场景。

  [b]结果检查[/b]

  通过图像对比检查结果。

  [b]工具整合[/b]

  这家公司提供的是一整套解决方案。不单有测试管理工具,设备监控工具,甚至还有移动应用开发工具。

  [b]价格[/b]

  很贵。

  安卓应用自动化测试工具之六 - JamoSolutions

  背景:比利时公司,做了好几年了。

  突出特点:提供QTPEclipseVisual Studio插件;可以跨平台iOS/Android/Blackberry.

  接下来我们尝试从以下几个方面了解该工具:

  [b]脚本编辑器 & 脚本语言[/b]

  因为是通过插件形式工作的,脚本编辑器和脚本语言视乎开发工具(QTPEclipseVisual Studio)而定。

  [b]结果检查[/b]

  应该可以通过对比属性值检查结果。

  [b]价格[/b]

  不明,估计不会比开发工具贵。

  安卓应用自动化测试工具之七 - bsquare - TestQuest CountDown

  该工具的官方网址:

  背景:美国公司,做了好几年了。

  突出特点:跨平台;与测试管理工具整合。

  接下来我们尝试从以下几个方面了解该工具:

  [b]脚本编辑器 & 脚本语言[/b]

  不清楚,听说是根据坐标点和图像判断。

  [b]结果检查[/b]

  也不清楚。

  [b]工具整合[/b]

  整合这家公司自身的Test Designer/Test Manager/Test Runner之类的工具。

  [b]价格[/b]

  不清楚,听说有点贵。

  安卓应用自动化测试工具之八 - ZAP-fiX

  该工具的官方网址:

  背景:美国公司,做了好几年了。

  突出特点:QTP插件;跨平台。

  接下来我们尝试从以下几个方面了解该工具:

  [b]脚本编辑器 & 脚本语言[/b]

  其实是QTP的插件。

  [b]结果检查[/b]

  同QTP.

  [b]跨平台[/b]

  可以跨Android/iOS测试。

  [b]价格[/b]

  不详,肯定不会比QTP卖的贵。

  安卓应用自动化测试工具之九 - eggPlant

  该工具的官方网址:

  背景:美国公司,做了好几年了。

  突出特点:跨平台;整合测试管理工具。

  接下来我们尝试从以下几个方面了解该工具:

  [b]脚本编辑器 & 脚本语言[/b]

  不详。由于可以跨平台,估计是坐标点或图像比较。

  [b]结果检查[/b]

  不详。

  [b]跨平台[/b]

  可以跨Android/iOS/Blackberry/Windows Phone等。

  [b]价格[/b]

  不详。由于可以与Rational Quality Manager整合,所以估计不会比Rational的工具卖的贵吧。

  安卓应用自动化测试工具之十 - Testin

  该工具的官方网址:

  背景:北京公司,近两年刚起步。

  突出特点:跨平台。

  接下来我们尝试从以下几个方面了解该工具:

  [b]脚本编辑器 & 脚本语言[/b]

  只能录制脚本,无法编辑。

  [b]结果检查[/b]

  不详。

  [b]跨平台[/b]

  可以跨Android/iOS,但是好像脚本要分开录制。

  [b]价格[/b]

  不详。应该不贵。

  安卓应用自动化测试工具之十一 - ExperiTest - SeeTestMobile

  该工具的官方网址:

  背景:美国公司,近两年刚起步。

  突出特点:可录制;跨平台。

  接下来我们尝试从以下几个方面了解该工具:

  [b]脚本编辑器 & 脚本语言[/b]

  支持不同工具的Plug-in,脚本语言视乎工具而定。

  [b]结果检查[/b]

  图像比较,OCR.

  [b]跨平台[/b]

  可以跨Android/iOS/Blackberry/Windows Phone.

  [b]价格[/b]

  SeeTestMobile - $2499USD/Year.

  安卓应用自动化测试工具之十二 - AndroidTester

  背景:上海公司,近两年刚起步。

  突出特点:可录制。

  接下来我们尝试从以下几个方面了解该工具:

  [b]脚本编辑器 & 脚本语言[/b]

  独立编辑器,Python脚本语言。

  [b]结果检查[/b]

  图像比较。

  [b]跨平台[/b]

  只支持Android.

  [b]价格[/b]

  不详,应该不贵。

  安卓应用自动化测试工具之十三 - SmartRobot

  背景:北京公司,近两年刚起步。

  突出特点:可录制,与测试管理平台整合。

  接下来我们尝试从以下几个方面了解该工具:

  [b]脚本编辑器 & 脚本语言[/b]

  独立编辑器,可生成RobotiumMonkeyRunner脚本语言。

  [b]结果检查[/b]

  不详。

  [b]跨平台[/b]

  只支持Android.

  [b]价格[/b]

  不详,应该不贵。

  安卓应用自动化测试工具之十四 - Others

  除了上述介绍的商业工具,Android自动化测试其实还有很多开源工具,大家可以陆续学习,这里尝试列举一些:

  1. Robotium - - 地球人都知道。

  2. MonkeyRunner - 自己上网搜吧~

  3. WindRiver - - 这家厂其实是做芯片的,但是他们也有一个自动化测试框架,好像是不卖的。

  4. Robolectric - pivotal.github.robolectric/l - 这其实是个单元测试框架。

  5. Sikuli - - 这家专门做图像比较的。

  如果大家发现作者写的有误的地方,敬请指正。或者大家还有其它好工具推荐,一起分享吧~

 

android 黑盒自动化测试工具比较  

2012-08-10 11:04:42|  分类: 自动化测试|字号 订阅

导言很早以前就开始折腾android的自动化测试,不过,本人毫无测试基础,只能,google那里搜索到仅有的一些资源,和目前,唯一一本讲android测试的书(应该是吧,如果还有希望告之). google那里搜来的资源大多都是...

导言
  
很早以前就开始折腾android的自动化测试,不过,本人毫无测试基础,只能,google那里搜索到仅有的一些资源,和目前,唯一一本讲android测试的书(应该是吧,如果还有希望告之).

  google那里搜来的资源大多都是介绍类的文章,比较少有实例操作,关于,android自动化测试,优酷上有个淘宝的框架叫做----TMS的视频演示,因为,那里说不让转载,所以,感兴趣的话就去google一下,就能看到.

  顺便说一下,这个专题不是一个专业,严格的android测试博文,所以,不要以专业的测试眼光去评论,这是,简单的运用一下测试,让我们的程序员编出更好的代码

自动化的 UI 测试
  
目前能免费进行android UI的自动化测试的方法有以下三种:

 

 

Monkey&MonkeyRunner

android Junit 测试框架

Robotium

入门难度

一般

困难

非常简单

功能方面

很一般

无所不能

基本满足

 

关于Monkey & MonkeyRunner可以参考本人写的另外两篇
(评论部分有些常见问题及部分解决有兴趣的可以大概浏览一下)

 

(算是一个小小的实践吧)

说下,Monkey&MonkeyRunner

优点: 上手简单,只需要apk

缺点: 文档少,容易出错,编写脚本需要python基础.

android Junit
关于这个内容我曾经做个一个小小的视频,后来上传到了优酷

Android 测试入门教程之activity简单测试 (慎入,声音比较蛋疼,画面被优酷压缩得不像样..)

说下, android for Junit

优点: 无所不能

缺点: 上手不容易,需要源码.

 

Robotium
  
本文重点简介的方法….

说下,Robotium

优点: 足够简单,足够强大,支持apk测试

缺点: 还不能替代android for Junit

愉快的UI测试之旅 by Robotium
Robotium
是一个开源项目:

http://code.google.com/p/robotium/

目前最新版本:Robotium 3.1 is now released!

竟然,要做测试,我们要新建一个用于测试的项目:

直接下载项目吧….

http://vdisk.weibo.com/s/3feB5

然后,创建一个android的测试项目..

1,创建项目

 

android   黑盒自动化测试工具比较 - hower - hower的博客
 

2,选择要测试的项目

 

android   黑盒自动化测试工具比较 - hower - hower的博客
 

3,完成

 

android   黑盒自动化测试工具比较 - hower - hower的博客
 

4,Robotium导入到测试项目里面,顺便说一下:ADT 17 预览版 4已经支持自动把libs下的jar包导入到依赖环境中用之前版本的朋友手动添加吧

 

android   黑盒自动化测试工具比较 - hower - hower的博客
编写第一个UI测试方法
 

public class FootTabClickTest extends ActivityInstrumentationTestCase2<TabViewActivity> { //1,创建一个自动化测试对象 private Solo tabSolo; public FootTabClickTest () { super("com.achai",TabViewActivity.class); } @Override protected void setUp() throws Exception { // TODO Auto-generated method stub super.setUp(); //2,初始化我们的测试对象


 

tabSolo = new Solo(getInstrumentation(), getActivity()); } @Smoke public void testClickEachTab(){ //3,获取我们view 中所有的单选按钮,没错就是这么简单… ArrayList<RadioButton> radioGroup = tabSolo.getCurrentRadioButtons(); //4,自动点击每个单选按钮 for(int i=0; i < radioGroup.size(); i++){ tabSolo.clickOnRadioButton(i); //5,暂停1s 用来看效果的


 

tabSolo.sleep(1000); } //6,又一个强大的功能,直接识别点击当前view中匹配的文本,与控件无关!!!!!!!


 

tabSolo.clickOnText("(?i).*?我的收藏.*"); tabSolo.sleep(1000); //7,这个是长按,注意留意动画


 

tabSolo.clickLongOnText("返回"); tabSolo.sleep(2000); // tabSolo.clickOnRadioButton(1); } @Override      protected void tearDown() throws Exception {          /  TODO Auto-generated method stub          super.tearDown();               }  


 

效果动画:

android   黑盒自动化测试工具比较 - hower - hower的博客
 

总结
   
就这么多了,感觉还不够那下次在更新吧

作者:游戏阿柴
出处:http://www.cnblogs.com/youxilua

http://ictch./blog/987384

http://blog.sina.com.cn/s/blog_9d65b4df01013oa9.html

http://www.cnblogs.com/ccxniit2004/category/349879.html
http://blog.csdn.net/jiguanghoverli/article/details/7835584
http:///read.php/59.htm

 

网站:www.AutomationQA.com QQ2225045276 EmailAutomationQA#vip.126.com

1、安装JDK 6Android SDK 2.3

 

2、安装Eclipse 3.5.2ADT8.0.1
https://dl-ssl.google.com/android/eclipse/

 

3HelloAndroid
E:\Program Files\Android\android-sdk-windows\docs\resources\tutorials\hello-world.html

 

4Android UnitTest
hello testing

E:\Program Files\Android\android-sdk-windows\docs\resources\tutorials\testing\helloandroid_test.html

Activity testing
E:\Program Files\Android\android-sdk-windows\docs\resources\tutorials\testing\activity_test.html

 

5Robotium
Tutorial

D:\Android\robotium\RobotiumForBeginners.pdf
http://code.google.com/p/robotium/wiki/Getting_Started

example
http:///blog/?p=300
D:\Android\robotium\ExampleTestProject_v2.0.zip

Robotium API帮助文档:
robotium-solo-2.0.2-javadoc

 

6Monkey
UI/Application Exerciser Monkey
E:\Program Files\Android\android-sdk-windows\docs\guide\developing\tools\monkey.html

monkey源代码:
http://fanfq./blog/781694
Android SDK
源代码:
http://www.oschina.net/code/explore/android-2.2-froyo

 

7MonkeyRunner
E:\Program Files\Android\android-sdk-windows\docs\guide\developing\tools\monkeyrunner_concepts.html

 

8adb shell sendevent
http://blog.csdn.net/roger_ge/archive/2010/05/03/5552740.aspx


9
、辅助工具
hierarchyviewer
ddms
adb

 

 

 

-------------------------------------------------------------------------------------------------------------

 

 

 

Android相关测试工具:

robotium
http://code.google.com/p/robotium/

autoAndroid
http://code.google.com/p/autoandroid/

Android Scripting Environment
http://code.google.com/p/android-scripting/

 

BSQUARE TestQuest CountDown and TestQuest Pro:
http://www./automated-testing-tools.aspx

Jamo:
http://www./documents/android.html

Test Automation for Smart Devices - Mobile Test Automation:
http://www./mobile-application-testing-smart-devices.html

QTP+SeeTest:
http:///download/
http:///support/tutorial/how-to/set-up-new-project/connect-an-external-device-e-g-android/
http://www./knowledge-base/articles/environment-techniques-id15/mobile-id777/test-android-with-qtp/


 

 

---------------------------------------------------------------------------------------------------------------------------

 

 

测试手段1 CTS

用来确保某设备符合Android兼容性规范。
 

 

测试手段2 Monkey


1
应用程序的开发者可以测试自己应用的鲁棒性。

[鲁棒是Robust的音译,也就是健壮和强壮的意思。
鲁棒性(robustness)就是系统的健壮性。它是在异常和危险情况下系统生存的关键。比如说,计算机软件在输入错误、磁盘故障、网络过载或有意攻击情况下,能否不死机、不崩溃,就是该软件的鲁棒性。所谓鲁棒性,是指控制系统在一定(结构,大小)的参数摄动下,维持某些性能的特性。根据对性能的不同定义,可分为稳定鲁棒性和性能鲁棒性。以闭环系统的鲁棒性作为目标设计得到的固定控制器称为鲁棒控制器。 ]

2 设备制造商可以使用猴子对自己的设配施行压力测试。看设备能坚持多久。

Monkey测试即可以针对全局,也可以正对某个局部(某个 Category, package等等)。
执行简单,效果明显。

 


测试手段3: ASE

ASE 意思为 Android 脚本环境, 即我们可以通过脚本(比如 Python)调用 Android 的功能,从而定制一些测试。比如打电话,发短信,浏览网页,等。

我们可以扩充它的APIJava 部分), 并用python 脚本调用这些 API, 从而实现丰富的测试功能。
用于API 部分可以访问到Android全部API, python又能灵活部署测试,所以 ASE 的扩展性非常好。

 

 

测试手段4: Robotium


该工具用于黑盒的自动化测试。可以在有源码或者只有APK的情况下对目标应用进行测试。

Robotimu 提供了模仿用户操作行为的API,比如在某个控件上点击,输入 Text 等等。

 

 

测试手段5 单元测试

Android 本身带有很多单元测试例子,我们可以按需要模仿它们,针对某个应用进行单元测试。

注意 Android Instrument机制功能非常强大,可以测试 UI

总结

对于 CTS/Monkey, 我们不需要开发,只要执行测试就可以了。

对于 ASE, 我们可以扩充它的现有API(Java), Python调用这些API实现丰富的测试功能。

Robotium 模仿普通用户行为,可以试着把一些原来由测试工程师做的测试变成Robotium自动化实现。

 

 

-------------------------------------------------------------------------------------------

 

 

android 2.3 hierarchyviewer.bat problems

http://www./android-discussions/android-2-3-hierarchyviewer-bat-problems/

 

In android 2.3 sdk, the hierarchyviewer.bat don’t work, it shows

” Failed to get the adb version: Cannot run program “adb.exe” ”

after I put all “platform-tools” dir files to “tools” dir, it works fine.

 

 

 

自动化测试资讯平台 http://www.AutomationQA.com

摘要
桌面应用程序与浏览器端的自动化测试都已经历了十年的发展,无论是从工具上还是项目管理方法论上都已经趋于成熟。而移动设备端应用程序的自动化测试近两年才刚起步,似乎一切尚处于探讨与研究阶段。但我们似乎已经看到其爆炸性的需求增长势头。可以从这两方面着眼分析:其一,移动应用从数量上和逻辑复杂程度上的增长,以及产品发布周期的紧缩,使得快速回归测试迫在眉睫;其二,安卓系统的开放性造成硬件厂商百家争鸣的局面,设备款式之多,迫使移动应用的兼容性测试提上日程。纵观当前智能手机两大主流阵营iPhoneAndroid,似乎安卓应用开发商与设备制造商更能体会兼容性测试的切肤之痛。鉴于此,并结合传统桌面系统上的自动化测试经验,我们在此探讨基于Android平台应用程序的关键字驱动自动化测试的可能性,并摸索一条适合在移动应用开发过程日新月异的现实情况中切实有效的实现和实施自动化测试的路子。

理论基础

在传统的桌面应用软件与浏览器端应用的自动化测试领域,已经有相当成熟的工具可供用户选择,例如商业工具HP QTP IBM Robot/RFT Borland SilkTest;开源工具如Selenium Watir等。剖析这些工具,它们似乎都有着相同的功能结构:

对被测应用界面对象/界面元素的捕获与识别,并对其进行管理与操作;
对于测试脚本的编辑功能与语法解析功能;
对于测试数据的组织与管理;
对于脚本执行结果的分析与输出;

如果细说,还可以牵扯到如脚本录制功能,插件管理功能,与测试管理工具、缺陷跟踪工具的整合等内容,涵盖面相当广泛。但所有这些都是为了一个目的:模拟测试人员行为,达到功能性回归测试的目的。本文尝试从以下最关键的几点来分析自动化测试工具的核心构成部分。

1. 关键字驱动

关键字测试的主要思路是以面向对象的方式来管理被测应用的对象、对象的相关操作、测试数据以及这些测试数据之间的组合关系。关键字驱动是自动化测试中行之有效的方式,它可以帮助测试工程师更方便的维护测试脚本、构建复杂的业务逻辑测试用例、并节省手工测试的执行时间(尤其是在回归测试阶段)。关键字驱动主要由以下三种元素构成:

1.被测对象,即被测应用界面上的元素;
2.
针对这些对象的操作,如点击(按钮)、填充(文字)、选择(单选框/多选框);
3.
以及基于这些操作的数值;

上述三种元素可以描述为以下表格:

对象操作数值
文本框输入文本值
按钮点击无
选择框选择选项值
或者以面向对象的文法表述为:
对象.操作()
该语句是关键字驱动脚本的构成基础。

2. 对象库

对象库是用于储存被测应用程序界面对象(界面元素)的地方。它是关键字驱动测试工具的关键点。有了它,用户可以更容易的维护被测对象、更快速的构建测试脚本。它是如何做到这些的呢让我们看看下面的结构:

如果对象都保存在对象库,它们可以被集中管理。与此同时,测试脚本(一个或多个)可以根据自身也许需求随意调用这些对象来使用。这使得多位测试工程师协同开发测试脚本成为可能。

对象库也可以分为两层,一层面向用户视角,另一层面向程序视角。这两层之间的对象是一一对应关系。这样做有助于测试脚本(测试用例)独立于被测应用程序。例如,应用程序的界面对象Obj 1改变了,但所有引用了该对象的测试脚本无需改动,因为它们是引用的对象Obj A,而非直接引用Obj 1

3. 测试数据组织结构

当我们提到测试用例的时候,通常指的是一系列操作步骤以及针对这些步骤所用到的测试数据。在之前的章节中,我们已经探讨了基于被测对象的操作步骤,现在我们来谈谈测试数据相关的内容。
测试数据,通常可以理解为填入被测表单各个字段中的数值。这些数值需要被很好的组织和保存,以防止数据冗余。可问题是,如何有效的组织和存放这些数据
在前面关于对象库的文章中,我们可以看到,其实测试数据也可以像对象那样被保存于数据库。可以存于数据库的表中,也可以存在表格文件,如Excel.csv文件。这些表中的字段(表结构)需要跟被测表单中的字段一一对应。

在每次测试迭代中,测试用例从数据表中挑选其中一条数据用以执行,所以,表格中的数据需要设计为可重复利用的。当然,期望结果也可以存放于表格中,例如,这次操作的期望结果或返回值。
至此,我们已经讨论了关键字驱动的测试脚本、对象库和测试数据的组织。这几样应该都是自动化测试的关键点。但是,这些关键点能否直接套用与安卓应用的自动化测试呢这些我们将继续在接下来的章节中讨论。

前置条件

这一章我们要开始讨论基于安卓应用的自动化测试。在此之前,我们需要先关注两点安卓系统独有的两大特点:“Root扰码。这两点是在上述桌面应用自动化测试中不曾碰到过的。为什么会提及这两点呢原因很简单,就是关乎于安卓应用界面对象的识别。
设备是否需要Root
如果只是为了识别图像或浅层对象,如文本或坐标,测试工具不需要Root权限就可以办到。但是对于一些深层次的对象属性,如可见性、宽度、滚动属性等,恐怕就要获得系统Root权限才能截获。然而,是否有办法可以绕过系统Root权限就能捕捉深层对象属性呢毕竟,出于各种原因的考虑,Root机的动作不是所有测试人员都愿意做的。安卓系统的设计中规定,两个应用之间是互相独立的,双方各不干涉。不过,如果双方都具备相同的签名,则可互相通信。如此看来,签名就像一把钥匙,打开之后,测试工具就可以与被测应用通信了。

被测apk的签名与扰码

如果用签名的办法来获取对象,就有可能会引入另一个问题:对被测应用的反编译。毕竟,不是所有测试人员都能很容易的拿到代码编译一个测试版本。很多时候,是开发团队打包一个apk交予测试人员进行测试的。所以,要是测试工具与被测应用获得相同的签名,必须先经过反编译之后,设置相同的一个临时签名,再重新进行编译和打包。这样又会引入另一个问题:如果最初的apk加入了扰码,导致无法正确反编译怎么办就像签名一样,扰码也是一种保护Android APK的手段之一。遇到这种情况,似乎只能联系开发团队去掉扰码了。
上述两点是因为要抓取被测应用对象而引入的问题。当然,对于界面对象属性要求不高的话,也可以直接截取屏幕图片作为对象,这是这样做,就只能通过图像对比的方式来识别对象了。接下来,我们来看看市面上一些现有工具的做法。

工具

目前市面上的安卓测试工具主要分为三种类型:

通过界面图像的对比识别对象这类工具的代表是以色列的PerfectoMobile.com。这是一款纯Web操作方式的工具,可以支持测试脚本跨平台执行;
通过在源码级识别对象这类工具的代表是芬兰的TestDroid.com。它是以Eclipse Plug-in的方式工作,可以将录制的操作步骤生成RobotiumMonkeyRunner脚本;
通过数字签名识别对象这类工具的代表是DroidPilot.com。它可以说是高度模仿HP QTP的操作方式,对于自动化测试工程师来说,也许会有似曾相识的感觉;

接下来,我们准备从以下几个方面剖析这三类工具对于关键字驱动自动化测试的支持:

1. 与被测apk的通信捕获对象、控制行为
2.
脚本编辑器构建测试脚本、解析测试脚本
3.
并发控制多台设备脚本一次编译,可跨设备执行
4.
与其它测试工具的整合测试用例管理、缺陷跟踪

1. 与被测apk的通信捕获对象、控制行为

首先来看PerfectoMobile。这款工具是纯Web操作方式。它对应用程序界面对象的识别是通过图像对比来判断,所以严格来讲,这并不能称之为对象。但不得不承认,这种做法使得跨平台(iOS Android Blackberry…)的对象识别成为可能。同样道理,即是从图像来识别对象,也是通过图像来操作对象。当对象库中的该图像在当前屏幕的对比匹配率达到一定程度,即可认为找到了该对象,从而也就可以对相应区域进行点击、滑动等操作了。

另一种是TestDroid的做法,直接从代码级截获对象。在Eclipse开发工具装上TestDroid插件,直接点击录制按钮,即可启动被测应用。所录的操作步骤,可以生成RobotiumMonkeyRunner脚本(注:RobotiumMonkeyRunnerAndroid平台最流行的两款开源测试工具)。这种直接在代码级操作的做法,尽管能毫无阻拦的拿到任何想要的对象信息,但是也有几点待商榷之处:1.对于测试工程师直接来到代码级进行操作,从代码安全性考虑,这并不是对于所有企业都可行;2.这种做法仅限于Android应用,不能做到像图片识别那样跨平台。当然,对于iOS引用来说,是否需要花力气去做自动化测试,还是可以商议的,毕竟它的设备种类不太多,省去了许多兼容性测试的成本。

第三种是DroidPilot的做法,即上面《前置条件》章节提到的通过签名模式与被测应用取得通信。这种做法虽然也是仅限于Android平台,但毕竟可以抛开源码,更贴近于测试工程师的工作行为。然而,正如所提到的,这种做法难免遭遇扰码的阻碍。所以,用这种方式做自动化测试,必须要求被测应用不能加任何扰码信息。其实这里还有一点是关于反编译之后,被测应用的行为是否会发生改变的问题。这里可以确定的是,由于反编译之后,仅仅是改变了被测应用与测试工具之间的临时签名信息,对于被测应用压缩包中的信息并无任何改动,所以,被测应用的行为是可重复、可验证的。

2. 脚本编辑器构建测试脚本、解析测试脚本

对于PerfectoMobile,由于它是以纯Web方式操作,即脚本的编辑和执行都是在浏览器端操作,这样可以让客户免于安装客户端。他在Web端提供了一种脚本设计器,可以通过拖拽设备模拟按键(如打电话,发短信,音量键、返回键等)到设计窗口,编排顺序以产生测试用例。近年PerfectoMobile又提供了HP QTP插件,使用户可以用QTP来制作脚本,并把做好的脚本上传到他们的网站,借助他们的设备来执行脚本。所以,这款工具的脚本构造能力还是相当强大的。而且,由于与QTP结合,使得自动化测试工程师更能平滑的从桌面应用程序自动化测试过渡到移动应用自动化测试。

TestDroid则通过流行的开源工具Eclipse作为脚本编辑器。它以Eclipse插件的形式存在。通过该插件来录制脚本、回放脚本。录制的脚本可以生成RobotiumMonkeyRunner脚本语言。这些脚本语言对于开发工程师来说也许会很熟悉,因为有不少安卓开发工程师自己也会用这些工具来制作一些简单的自动化测试脚本用于每日脚本构建(Daily Build)后的冒烟测试(Smoke Test)。对于测试工程师来说,上手这类JavePython语言视乎要比QTP所用的VB Script要稍微吃力一点,且对于Eclipse这类开发工具的使用熟练程度也不及QTP。尽管如此,对于在语言和工具的学习曲线这方面的开销,比起日后Eclipse所能提供的强大而灵活的脚本编辑能力来说,应该也是值得的。

DroidPilot则是完全自己开发的脚本解析器,选用的语言也是VB Script。而且它也提供了一种脚本设计器,这种设计器可以通过点选界面对象和针对对象的操作,来构建测试流程,并把设计好的测试流程转换成为脚本语言。这种设计器虽然可以快速构建简易的测试流程,但是对于复杂一点的测试逻辑,还需要测试工程师自己在脚本中完善。但无论如何,这个动作已经大大简化了测试工程师的代码量,且操作效率甚至比录制更灵活,因为它可以在任意操作步骤之间增加或删减步骤,且能调整操作步骤的前后顺序。

3. 并发控制多台设备脚本一次编译,可跨设备执行

PerfectoMobile号称拥有市面上所有智能手机(iOS AndroidBlackberry…),而且这些手机部署在全球不同国家。用户登录Web控制台后,可以对这些手机进行任意操作:打电话、发短信、安装/卸载被测应用等。它不但等做到测试脚本跨设备执行,甚至还可以跨平台执行,因此,可以说,他在兼容性测试方面还是考虑的比较全面的。然而,似乎有一点遗憾的是,制作好的脚本并不能并发的在多台设备上执行,而是需要手工选择设备执行。而且,对于被测应用的部署也是一样的,缺乏批量部署这样的功能。这可能限制了并发性兼容性测试的工作效率。

TestDroid由于是使用Eclipse插件形式工作,这个插件在录制和回放脚本的时候同一时间只能链接一台机器。尽管这样做对于脚本的编辑和调试来说已经够用了,但还无法满足批量设备的兼容性测试。因此,他们又额外开发了一个在线平台,用户只需要将开发好的脚本和被测应用上传到他们的服务器,这些应用和脚本就会被自动部署于服务器端的大量安卓设备,并执行测试。最后,用户会收到兼容性测试报告。

DroidPilot有专门的脚本编辑工具Script. Designer,而且这个工具也是限定了只能连接一台设备进行脚本编辑和回放。如果需要连接多台设备进行兼容性测试的话,就需要用到DroidPilot的另一款工具——AutoRunner。通过这款工具,用户可以将多个脚本在多台设备上执行回放,还可以设置按设备顺序回放,还是多设备并发回放。并且还能自定义回放起始时间。

4. 与其它测试工具的整合测试用例管理、缺陷跟踪

PerfectoMobileWeb端是没有整合任何测试管理工具的,纯粹是提供设备给用户使用,用于制作测试脚本和回放。近年由于新开发的QTP Plug-in,使得它能借助HP测试管理工具Quality Center用于管理测试脚本和跟踪缺陷。

TestDroid由于走的是开源工具路线,可以借助Eclipse的相关插件来达到管理测试脚本的效果。例如,使用Eclipsesvn插件,可以使得脚本保存于svn数据库,有利于测试团队协同工作。但是对于缺陷跟踪管理这一块,似乎还没有明确的工具整合进来。

DroidPilot在设计之初就考虑到了与一些开源测试管理工具的整合,例如,用TestLink作为测试用例管理,用Bugzilla/Mantis作为缺陷管理工具。因此,DroidPilot提供了与这些开源工具之间对接的http协议接口。

实践

探讨完上述关于不同测试工具的使用特点,更准确的说,是安卓应用自动化测试工具的特点,我们不妨来实践(其实是模拟)一个移动应用的测试过程。这里我们选用API Demo作为被测应用,选用DroidPilot作为测试工具。

分析被测应用

被测应用API Demo使用标准Android SDK作为开发控件,且被测应用未加扰码,因此,界面上所有元素可以被DroidPilot识别。

对于一些非标准Android SDK控件开发的应用,这里有两种情况:一种情况控件完全由自己开发,如果是这种情况,DroidPilot完全无法识别对象;另一种情况是在标准控件基础上做了二次开发,这样的话DroidPilot只能识别到原生SDK那一层。对于这两种情况,都可以联系DroidPilot开发团队为非标准控件度身定制专属插件,用于识别被测控件。

对于扰码问题,正如上述《前置条件》章节所描述的,DroidPilot本身是无能为力的,只能请开发团队去掉扰码,打包一个不加扰码的测试包给测试团队使用了。

设计测试用例

这里我们假设一个测试用例是进入AppActivityAnimationFade in界面,对界面的元素(按钮、文本框、多选框、单选框、下拉列表)进行操作,并验证文本框的文字是否符合我的预期结果。测试步骤如下:

 

开发测试脚本
先使用DroidPilot脚本编辑工具抓取各个屏幕的对象,然后把这些对象选入脚本设计器,按照测试用例的顺序来排列,如下图:


然后DroidPilot会根据设计器的内容自动转变成脚本代码,如下图:


在这个用例中并没有设计复杂逻辑,所以无需在脚本中添加如If…Else之类的判断语句。

运行及维护

使用脚本编辑器可以连接一台设备,用于调试测试脚本。但是如果需要将测试脚本同时运行于多台设备进行兼容性测试,就需要用到DroidPilot的另一款工具AutoRunner。通过它,用户可以同时选中多个脚本,并在多台设备上执行。而且用户也可以控制脚本的执行起始时间,使用户可以定时执行脚本。

更多考虑
在以上的章节中,我们的着眼点都是在工具和技术上的讨论。但是对于真实的移动应用测试项目,一旦引入自动化测试,必然需要考虑对整体进度、项目成本的影响。所以,这里就会有以下考虑:

评估自动化工具的引入对现有项目进度的影响
对于传统项目,如果在前期就已经有自动化测试的规划,项目经理手上应该有足够的资源调配自动化测试工程师,使得他们可以是一个独立于手工测试之外的团队,这种做法并不会对项目进度产生太大影响。但是对于移动应用测试,通常的项目周期都会比较短,而且测试团队的成员数量不足以额外的配备专门的自动化测试工程师,很可能是一些手工测试工程师挤出时间来做一些小量的自动化测试脚本,用于版本发布时的快速冒烟测试。这种花在自动化测时间上的比例,相比于本来就不是很长的测试周期,也许就会显得特别突出。

团队工作模式的变化
如果如上所言,只是手工测试工程师挤出时间来做一些小量的自动化测试脚本,用于版本发布时的快速冒烟测试,那对于自动化的整体效果来说并不见得有很大帮助。至少对于目前大部分安卓开发项目来说,很少见到投入一至两位专职自动化测试工程师来做这类事情。但是,如果考虑到将来频繁的版本发布,以及安卓应用独有的海量的兼容性测试,对于自动化的前期投入还是显得有必要的。

如下图,传统模式,测试工程师可能在第一轮测试才有一次Full Test,在后续的回归测试中,可能只能做到部分回归。


如果引入自动化测试工程师,同步开发测试脚本(理想情况,每个应用自动化比率达到70%~80%,整体自动化比率达到60%~70%),有可能使得回归测试比率有所提高。


从零做起
既然如此,何不从现在开始,从零开始,在项目中尝试引入自动化测试,哪怕只是抽调部分人力着手部分应用的自动化测试,至少可以达到Daily Build Smoke Test的效果。再者,移动应用自动化测试行业正处于起步阶段,此时介入也不失为一个好时机。

结论
回顾上述讨论的内容,我们设想能在移动应用自动化测试领域延续桌面系统自动化测试的成功经验,从理论基础、工具支持、以及后续项目管理方面都做了一番探讨。尽管主要还是局限于安卓应用的自动化方面,对于iOS提及较少。不难理解,iOS本身支持的机型有限,对于设备兼容性测试并不是重点关注的内容。而在功能性回归测试方面,它本身也有相关工具支持。至于像Blackberry之类的平台,因为本身并没有呈现爆炸性的应用增长,所以也没有列在讨论范围。所以,本文仍以安卓平台作为自动化测试的突破口,希望从中能结合市面上的一些商用工具,尝试实践以关键字驱动为基础的自动化测试,而非原始的以坐标点为基础的屏幕点击测试。对于开源工具也没有提及,原因是考虑到像RobotiumMonkeyRunner之类的流行工具可能更贴近于开发工程师使用,而非更贴近于测试工程师。所以,我们希望在上述的讨论中能带给读者在测试项目中新的启发。

android自动化测试辅助工具Weinre

Weinre是一个类似于普通浏览器inspector功能的一个软件工具

1.     调研的目的:我们在写android自动化测试用例涉及到webview的时候,抓取页面元素非常苦恼。
通常的做法是:跑一些脚本,通过webview提供的接口获取webviewURL。再设置浏览器的代理,然后通过浏览器的web developer tools来查找页面元素。
Weinre的作用在于它提供了一个server端和client端,能直接对androidemulator进行页面元素获取。

2.     优劣对比:
优势:使用Weinre的好处在于操作过程简便。能直接对androidemulator进行页面元素获取。
劣势:需要在页面代码中绑定一个js包。用来和server端通信。

3.     支持多平台:同时支持androidIOS系统
支持多用户模式操作。

4.     下载安装包:https://github.com/phonegap/weinre/archives/master

5.     server端需要有java环境,使用java命令启动server: java -jar weinre.jar –httpPort 8081
或者你可以在配置文件 ~/.weinre/server.properties 中配置。
淘宝内部可以访问http://automan.:8081/;按照提示将 http://automan.:8081/target/target-script-min.js#anonymous拷贝至您的页面中,打开您的emulator,会自动建立clientserver的通信。这样你就可以通过浏览器控制androidemulatorwebview了。anonymous为你的个人id,以区别于其它用户。这个id绑定了两个地方,一个是你打开的客户端eg:http://automan.:8081/client/#anonymous,另一个就是你需要放到你的web页面里的js http://automan.:8081/target/target-script-min.js#anonymouspush your_html to_emulator_category

6.     效果展示,主页

链接上serverclient端:

可以通过左上角的几个toolbarwebview进行操作。

通过Elements tool可以获取页面元素:

从事android手机测试一年了,也从中学到了很多的东西,乘现在项目有点空闲,总结一下,也算是慢慢培养下自己的总结能力吧,嘿嘿,废话不多说,干正事。

1.我第一个接触到的就是robotium框架,Robotium是一款测试Android App的测试框架,它使得编写黑盒测试代码更加容易和稳定。它其实是对android自带测试类Instrumentation的一个封装,方便于测试人员直接调用封装好的接口。通过使用Robotium,测试用例开发人员能够跨越多个Activity,开发出功能,系统以及验收测试用例。不过我们用到后期发现,签名是比较繁琐的,因为开发的测试包(apk格式)和测试对象的应用签名不匹配,导致测试包无法运行,当然我们可以使用重签名工具,后面具体说。

2.因为robotium的签名太繁琐,所以最后又试了下monkeyrunner工具。使用monkeyrunner时,必须配合着pythonmonkeyrunner是官网提供的工具,提供了一些api,可参见官网,这个用到后来发现也有很大的弊端,因为方法基本上就是那么几个,直接对应用的坐标进行点击,如果坐标定位的不准确,那么后面的脚本就无法继续运行。所以也比较纠结,但是测试一些简单的功能是没问题的了,而且开发速度比较快。

3.使用网上第三方开发的测试工具。android自动化测试工具现在不多,但是已经有很多软件可以使用了,如seeTestaster等工具,seeTest工具蛮不错的,就是需要钱,嘿嘿,如果有其他方法比如来个破解啥的,那就牛了,seeTest工具提供了手机直接录制脚本的功能,不需要任何开发经验的人都能使用,适合黑盒的同学们。另外aster工具是免费开源的,大家有空可以google下。

4.monkey测试,也是官网提供的,这个百度下就可以了,很多的。可以对系统的健壮性做一个评估,也可对一些应用进行压力测试嘛,他就是模仿用户随便对手机点啊点的,就好像你有个手机,但是被你家的3岁娃给拿去了,那他就会乱点啊点的,搞不好就点出死机来了。

  以上前三种方式基本上是能应付一些简单的功能测试的场景了,在后面我将慢慢的补齐这方面的东东。在此,我列下我认为我们所需要的一些测试技术:

1.excel的使用,这个对报告的整理很重要,还有很多数据的处理,图形的生成,如果使用宏就简单的多了,这也算是自动化的一个方面吧。

2.shell脚本的基本写法和批处理的基本写法,之所以是说基本写法,就是不需要掌握太深入,知道一些简单的命令和语法规则,这个也是基本技能之一,从网上多搜搜就可以了。

3.python脚本的写法,这个主要是和monkeyrunner配合使用,掌握基本语法就可以了。

4.android开发的基本知识,不需要太牛b,否则直接干开发得了,知道怎么新建项目就可以了,然后套用robotium的框架,就能使用robotium写一些简单的功能测试用例了。

  其他的后面慢慢再说吧,现在就这了。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多