android自动化测试 现在,已经有大量的Android自动化测试架构或工具可供我们使用,其中包括:Activity Instrumentation, DroidPilot,MonkeyRunner,
Robotium, 以及Robolectric。另外LessPainful也提供服务来进行真实设备上的自动化测试。 Android自身提供了对instrumentation测试的基本支持,其中之一就是位于android.test包内的 ActivityInstrumentationTestCase2类,它扩展了JUnit的TestCase类来提供Android activities的功能测试。在应用测试中,每一个activity首先会被Instrumentation初始化,然后再加载到Android模拟 器或设备的Dalvik虚拟机中来执行。 一个新出android自动化测试工具,DroidPilot是一个自动化测试工具。它可以针对于Android平台的应用程序进行测试脚本编辑、自动回放、结果检 查、报告输出等操作,以此来缩短回归测试的时间,提升项目整体进度。测试脚本不仅可以运行于模拟器,更可以同时运行于多台移动设备,这样更能凸显测试结果 的真实性和可比性。 Android SDK自带一个测试工具MonkeyRunner,它提供的API和执行环境可以运行Python语言编写的测试代码。它提供API来连接设备,安装/卸 载应用,运行应用,截屏,比对图片来判断特定命令执行后的屏幕是否包含预期信息,以及运行对应用的测试。MonkeyRunner使用 ActivityInstrumentationTestCase2, ProviderTestCase,ServiceTestCasek, SingleLaunchActivityTestCase及其他类来定义测试用例,并使用InstrumentationTestRunner类来运行 测试。 Robotium是另一种通过InstrumentationTestRunner来完成Android交互式测试的架构,它横跨多个 activities,支持功能测试,系统测试和接收测试。Robotium支持Activities、Dialogs、Toasts、Menus、 Context Menus甚至Honeycomb,并且它可以同Maven和Ant集成来完成持续集成测试。Robotium被称之为针对Android应用的又一个 Selenium。 Robolectric另辟蹊径,它并不依赖于Android提供的测试功能,它使用了shadow objects并且运行测试于普通的工作站/服务器JVM,不像模拟器或设备需要dexing(Android dex编译器将类文件编译成Android设备上的Dalvik VM使用的格式),打包,部署和运行的过程,大大减少了测试执行的时间。Pivotal实验室声称使用Robolectric可以在28秒内运行1047 个测试。 LessPainful将Android测试又推进了一步,它提供了一个多设备平台自动化测试的服务。用户上传应用(*.apk)和用 Cucumber(一种业务相关的DSL)编写的测试文件,选择测试运行需要的设备配置,最后测试将自动执行并生成测试报告。它支持的设备包括 Garmin Asus,几款HTC,LG,Samsung Galaxy,Sony Xperia和Motorola Motodefy。
一、首先说说手机自动化测试的原理 基于优秀的图像对比库opencv的测试工具,测试脚本使用Python编写,非常强大。如果你的app没有源码,可以选择它;或者你想做系统测试(跨app的测试),也可以选择它。其它的还是用下面说的那些个吧。
我通过其核心包sikuli-script.jar实现了android的sikuli化,暂时不打算开源。其实原理挺简单的,认真看过sikuli源码的应该都能写出来。
看lz的意思应该只是想问应用层的,我来说点应用层的
先说说开源的吧: Robotium Monkeyrunner
Robolectric
CTS
还有个新兴的测试工具,以前在GitHub看到,现在找不到了,好像是BDD类型的语法;现在还不成熟。 另外基于web的测试也有基于Selenium Webdriver
的 Android WebDriver: 有两种:
基于Remote
Server的:官方提供了java接口的,但是Python版的官方里面却没有。我非常喜欢Python,所以自己实现了并且开源到了GitHub:https://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版本已经有支持UI的id操作的EasyMonkey了。可以git
clone git://android.kernel.org/platform...看看
原文转自:http://www.
Android 下的自动化测试工具总结
测试手段1: CTS (Compatibility Test Suits) 用来确保某设备符合 Android 兼容性规范。原来想扩充它,不是正道。
测试手段2: Monkey 1) 应用程序的开发者可以测试自己应用的鲁棒性。 2) 设备制造商可以使用猴子对自己的测试施行压力测试。看设备能坚持多久。 猴子测试即可以针对全局,也可以正对某个局部(某个 Category, package等等)。 执行简单,效果明显。
测试手段3:MonkeyRunner 1) 在工作站上通过API定义的特定命令和事件控制设备或模拟器。 2) 用于多设备控制,功能测试,回归测试,可扩展的自动化。 3) 比monkey强大,任何你在模拟器/设备中能干的事情,MonkeyRunner都能干,而且还可以记录和回放。
测试手段4: ASE (Android Script Environment) ASE 意思为 Android 脚本环境,即我们可以通过脚本(比如Python)调用 Android 的功能,从而定制一些测试。比如打电话,发短信,浏览网页,等。 我们可以扩充它的API(Java 部分), 并用python 脚本调用这些API, 从而实现丰富的测试功能。 用于API 部分可以访问到Android全部API, python又能灵活部署测试,所以 ASE 的扩展性非常好。
测试手段5: Robotium 该工具用于黑盒的自动化测试。可以在有源码或者只有APK的情况下对目标应用进行测试。 Robotimu 提供了模仿用户操作行为的API,比如在某个控件上点击,输入 Text 等等。
测试手段6:单元测试 Android 本身带有很多单元测试例子,我们可以按需要模仿它们,针对某个应用进行单元测试。 注意 Android 的Instrument机制功能非常强大,可以测试 UI.
测试手段7:Smart Robot (东舟软件) SmartRobot提供了录制产生测试用例的方式,用户操作手机即可产生用例,不需要逐行去编写用例脚本。测试用例与设备分辨率无关,与手机型号无关,同一用例可以在不同型号手机、不同分辨率手机下执行。 Smart Robot的测试用例基于Android Instrumentation。 Smart Robot是一款既能基于控件又能基于手机图像的自动化测试软件 SmartRobot不仅提供了基于Android界面控件的录制和回放机制,而且提供了基于界面图像的用例方式,二者兼而有之。即SmartRobot既可以做到验证界面控件的细节,也可以做到验证和比对手机界面图像。
总结 对于 CTS/Monkey, 我们不需要开发,只要执行测试就可以了。 对于 ASE, 我们可以扩充它的现有API(Java), 用Python调用这些API实现丰富的测试功能。 Robotium 模仿普通用户行为,可以试着把一些原来由测试工程师做的测试变成Robotium自动化实现。
SmartRobot
摘要 桌面应用程序与浏览器端的自动化测试都已经历了十年的发展,无论是从工具上还是项目管理方 法论上都已经趋于成熟。而移动设备端应用程序的自动化测试近两年才刚起步,似乎一切尚处于探讨与研究阶段。但我们似乎已经看到其爆炸性的需求增长势头。可 以从这两方面着眼分析:其一,移动应用从数量上和逻辑复杂程度上的增长,以及产品发布周期的紧缩,使得快速回归测试迫在眉睫;其二,安卓系统的开放性造成 硬件厂商百家争鸣的局面,设备款式之多,迫使移动应用的兼容性测试提上日程。纵观当前智能手机两 大主流阵营iPhone与Android,似乎安卓应用开发商与设备制造商更能体会兼容性测试的切肤之痛。鉴于此,并结合传统桌面系统上的自动化测试经 验,我们在此探讨基于Android平台应用程序的关键字驱动自动化测试的可能性,并摸索一条适合在移动应用开发过程日新月异的现实情况中切实有效的实现 和实施自动化测试的路子。 理论基础 在传统的桌面应用软件与浏览器端应用的自动化测试领域,已经有相当成熟的工具可供用户选择,例如商业工具HP QTP,IBM Robot/RFT,Borland
SilkTest等;开源工具如Selenium,Watir等。剖析这些工具,它们似乎都有着相同的功能结构: ● 对被测应用界面对象/界面元素的捕获与识别,并对其进行管理与操作; ● 对于测试脚本的编辑功能与语法解析功能; ● 对于测试数据的组织与管理; ● 对于脚本执行结果的分析与输出; 如果细说,还可以牵扯到如脚本录制功能,插件管理功能,与测试管理工具、缺陷跟踪工具的整合等内容,涵盖面相当广泛。但所有这些都是为了一个目的:模拟测试人员行为,达到功能性回归测试的目的。本文尝试从以下最关键的几点来分析自动化测试工具的核心构成部分。 1、关键字驱动 关键字测试的主要思路是以面向对象的方式来管理被测应用的对象、对象的相关操作、测试数据以及这些测试数据之间的组合关系。关键字驱动是自动化测试中行之有效的方式,它可以帮助测试工程师更方便的维护测试脚本、构建复杂的业务逻辑测试用例、并节省手工测试的执行时间(尤其是在回归测试阶段)。关键字驱动主要由以下三种元素构成: 1)被测对象,即被测应用界面上的元素; 2)针对这些对象的操作,如点击(按钮)、填充(文字)、选择(单选框/多选框); 3)以及基于这些操作的数值; 上述三种元素可以描述为以下表格:
或者以面向对象的文法表述为: 对象.操作(值) 该语句是关键字驱动脚本的构成基础。 2、对象库 对象库是用于储存被测应用程序界面对象(界面元素)的地方。它是关键字驱动测试工具的关键点。有了它,用户可以更容易的维护被测对象、更快速的构建测试脚本。它是如何做到这些的呢?让我们看看下面的结构:
实践 探讨完上述关于不同测试工具的使用特点,更准确的说,是安卓应用自动化测试工具的特点,我们不妨来实践(其实是模拟)一个移动应用的测试过程。这里我们选用API Demo作为被测应用,选用DroidPilot作为测试工具。 分析被测应用 被测应用API Demo使用标准Android SDK作为开发控件,且被测应用未加扰码,因此,界面上所有元素可以被DroidPilot识别。 对于一些非标准Android SDK控件开发的应用,这里有两种情况:一种情况控件完全由自己开发,如果是这种情况,DroidPilot完全无法识别对象;另一种情况是在标准控件基 础上做了二次开发,这样的话DroidPilot只能识别到原生SDK那一层。对于这两种情况,都可以联系DroidPilot开发团队为非标准控件度身 定制专属插件,用于识别被测控件。 对于扰码问题,正如上述《前置条件》章节所描述的,DroidPilot本身是无能为力的,只能请开发团队去掉扰码,打包一个不加扰码的测试包给测试团队使用了。 设计测试用例 这里我们假设一个测试用例是进入\App\Activity\Animation\Fade in\界面,对界面的元素(按钮、文本框、多选框、单选框、下拉列表)进行操作,并验证文本框的文字是否符合我的预期结果。测试步骤如下:
开发测试脚本 先使用DroidPilot脚本编辑工具抓取各个屏幕的对象,然后把这些对象选入脚本设计器,按照测试用例的顺序来排列,如下图:
如下图,传统模式,测试工程师可能在第一轮测试才有一次Full Test,在后续的回归测试中,可能只能做到部分回归。 如果引入自动化测试工程师,同步开发测试脚本(理想情况,每个应用自动化比率达到70%~80%,整体自动化比率达到60%~70%),有可能使得回归测试比率有所提高。 从零做起 既然如此,何不从现在开始,从零开始,在项目中尝试引入自动化测试,哪怕只是抽调部分人力着手部分应用的自动化测试,至少可以达到Daily Build Smoke Test的效果。再者,移动应用自动化测试行业正处于起步阶段,此时介入也不失为一个好时机。 结论 回顾上述讨论的内容,我们设想能在移动应用自动化测试领域延续桌面系统自动化测试的成功经验,从理论基础、工具支 持、以及后续项目管理方面都做了一番探讨。尽管主要还是局限于安卓应用的自动化方面,对于iOS提及较少。不难理解,iOS本身支持的机型有限,对于设备 兼容性测试并不是重点关注的内容。而在功能性回归测试方面,它本身也有相关工具支持。至于像Blackberry之类的平台,因为本身并没有呈现爆炸性的 应用增长,所以也没有列在讨论范围。所以,本文仍以安卓平台作为自动化测试的突破口,希望从中能结合市面上的一些商用工具,尝试实践以“关键字驱动”为基 础的自动化测试,而非原始的以“坐标点”为基础的屏幕点击测试。对于开源工具也没有提及,原因是考虑到像Robotium和MonkeyRunner之类 的流行工具可能更贴近于开发工程师使用,而非更贴近于测试工程师。所以,我们希望在上述的讨论中能带给读者在测试项目中新的启发。 安卓应用自动化测试工具汇总
接下来我们尝试从以下几个方面了解该工具: [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 背景:比利时公司,做了好几年了。 突出特点:提供QTP、Eclipse、Visual Studio插件;可以跨平台iOS/Android/Blackberry. 接下来我们尝试从以下几个方面了解该工具: [b]脚本编辑器 & 脚本语言[/b] 因为是通过插件形式工作的,脚本编辑器和脚本语言视乎开发工具(QTP、Eclipse、Visual
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] 独立编辑器,可生成Robotium或MonkeyRunner脚本语言。 [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那里搜来的资源大多都是... 导言 自动化的 UI 测试
关于Monkey &
MonkeyRunner可以参考本人写的另外两篇 (算是一个小小的实践吧) 说下,Monkey&MonkeyRunner 优点: 上手简单,只需要apk 缺点: 文档少,容易出错,编写脚本需要python基础. android
的Junit Android 测试入门教程之activity简单测试 (慎入,声音比较蛋疼,画面被优酷压缩得不像样..) 说下, android for Junit 优点: 无所不能… 缺点: 上手不容易,需要源码. Robotium 说下,Robotium 优点: 足够简单,足够强大,支持apk测试 缺点: 还不能替代android for Junit 愉快的UI测试之旅 by Robotium http://code.google.com/p/robotium/ 目前最新版本:Robotium 3.1 is
now released! 竟然,要做测试,我们要新建一个用于测试的项目: 直接下载项目吧…. http://vdisk.weibo.com/s/3feB5 然后,创建一个android的测试项目.. 1,创建项目
2,选择要测试的项目
3,完成
4,把Robotium导入到测试项目里面,顺便说一下:ADT 17 预览版 4已经支持自动把libs下的jar包导入到依赖环境中…用之前版本的朋友手动添加吧…
public class FootTabClickTest extends ActivityInstrumentationT
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(); }
效果动画:
总结 作者:游戏阿柴 http://blog.sina.com.cn/s/blog_9d65b4df01013oa9.html http://www.cnblogs.com/ccxniit2004/category/349879.html
网站:www.AutomationQA.com
QQ:2225045276 Email:AutomationQA#vip.126.com 1、安装JDK 6、Android SDK 2.3 2、安装Eclipse 3.5.2、ADT8.0.1 3、HelloAndroid 4、Android UnitTest Activity
testing: 5、Robotium example: Robotium
API帮助文档: 6、Monkey monkey源代码: 7、MonkeyRunner 8、adb shell sendevent
------------------------------------------------------------------------------------------------------------- Android相关测试工具: robotium: autoAndroid: Android
Scripting Environment: BSQUARE
TestQuest CountDown and TestQuest Pro: Jamo: Test
Automation for Smart Devices - Mobile Test Automation: QTP+SeeTest:
--------------------------------------------------------------------------------------------------------------------------- 测试手段1: CTS 用来确保某设备符合Android兼容性规范。 测试手段2: Monkey
[鲁棒是Robust的音译,也就是健壮和强壮的意思。 2) 设备制造商可以使用猴子对自己的设配施行压力测试。看设备能坚持多久。 Monkey测试即可以针对全局,也可以正对某个局部(某个 Category, package等等)。
ASE
意思为 Android 脚本环境, 即我们可以通过脚本(比如 Python)调用 Android 的功能,从而定制一些测试。比如打电话,发短信,浏览网页,等。 我们可以扩充它的API(Java 部分), 并用python 脚本调用这些 API, 从而实现丰富的测试功能。 测试手段4:
Robotium
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 摘要 理论基础 在传统的桌面应用软件与浏览器端应用的自动化测试领域,已经有相当成熟的工具可供用户选择,例如商业工具HP QTP, IBM Robot/RFT, Borland SilkTest等;开源工具如Selenium, Watir等。剖析这些工具,它们似乎都有着相同的功能结构: 对被测应用界面对象/界面元素的捕获与识别,并对其进行管理与操作; 如果细说,还可以牵扯到如脚本录制功能,插件管理功能,与测试管理工具、缺陷跟踪工具的整合等内容,涵盖面相当广泛。但所有这些都是为了一个目的:模拟测试人员行为,达到功能性回归测试的目的。本文尝试从以下最关键的几点来分析自动化测试工具的核心构成部分。 1. 关键字驱动 关键字测试的主要思路是以面向对象的方式来管理被测应用的对象、对象的相关操作、测试数据以及这些测试数据之间的组合关系。关键字驱动是自动化测试中行之有效的方式,它可以帮助测试工程师更方便的维护测试脚本、构建复杂的业务逻辑测试用例、并节省手工测试的执行时间(尤其是在回归测试阶段)。关键字驱动主要由以下三种元素构成: 1.被测对象,即被测应用界面上的元素; 上述三种元素可以描述为以下表格: 对象操作数值 2. 对象库 对象库是用于储存被测应用程序界面对象(界面元素)的地方。它是关键字驱动测试工具的关键点。有了它,用户可以更容易的维护被测对象、更快速的构建测试脚本。它是如何做到这些的呢让我们看看下面的结构: 如果对象都保存在对象库,它们可以被集中管理。与此同时,测试脚本(一个或多个)可以根据自身也许需求随意调用这些对象来使用。这使得多位测试工程师协同开发测试脚本成为可能。 对象库也可以分为两层,一层面向用户视角,另一层面向程序视角。这两层之间的对象是一一对应关系。这样做有助于测试脚本(测试用例)独立于被测应用程序。例如,应用程序的界面对象Obj 1改变了,但所有引用了该对象的测试脚本无需改动,因为它们是引用的对象Obj A,而非直接引用Obj 1。 3. 测试数据组织结构 当我们提到测试用例的时候,通常指的是一系列操作步骤以及针对这些步骤所用到的测试数据。在之前的章节中,我们已经探讨了基于被测对象的操作步骤,现在我们来谈谈测试数据相关的内容。 在每次测试迭代中,测试用例从数据表中挑选其中一条数据用以执行,所以,表格中的数据需要设计为可重复利用的。当然,期望结果也可以存放于表格中,例如,这次操作的期望结果或返回值。 前置条件 这一章我们要开始讨论基于安卓应用的自动化测试。在此之前,我们需要先关注两点安卓系统独有的两大特点:“Root机”与“扰码”。这两点是在上述桌面应用自动化测试中不曾碰到过的。为什么会提及这两点呢原因很简单,就是关乎于安卓应用界面对象的识别。 被测apk的签名与扰码 如果用签名的办法来获取对象,就有可能会引入另一个问题:对被测应用的反编译。毕竟,不是所有测试人员都能很容易的拿到代码编译一个测试版本。很多时候,是开发团队打包一个apk交予测试人员进行测试的。所以,要是测试工具与被测应用获得相同的签名,必须先经过反编译之后,设置相同的一个临时签名,再重新进行编译和打包。这样又会引入另一个问题:如果最初的apk加入了扰码,导致无法正确反编译怎么办就像签名一样,扰码也是一种保护Android APK的手段之一。遇到这种情况,似乎只能联系开发团队去掉扰码了。 工具 目前市面上的安卓测试工具主要分为三种类型: 通过界面图像的对比识别对象–这类工具的代表是以色列的PerfectoMobile.com。这是一款纯Web操作方式的工具,可以支持测试脚本跨平台执行; 接下来,我们准备从以下几个方面剖析这三类工具对于关键字驱动自动化测试的支持: 1. 与被测apk的通信–捕获对象、控制行为 1. 与被测apk的通信–捕获对象、控制行为 首先来看PerfectoMobile。这款工具是纯Web操作方式。它对应用程序界面对象的识别是通过图像对比来判断,所以严格来讲,这并不能称之为“对象”。但不得不承认,这种做法使得跨平台(iOS, Android,
Blackberry…)的对象识别成为可能。同样道理,即是从图像来识别对象,也是通过图像来操作对象。当对象库中的该图像在当前屏幕的对比匹配率达到一定程度,即可认为找到了该对象,从而也就可以对相应区域进行点击、滑动等操作了。 另一种是TestDroid的做法,直接从代码级截获对象。在Eclipse开发工具装上TestDroid插件,直接点击录制按钮,即可启动被测应用。所录的操作步骤,可以生成Robotium或MonkeyRunner脚本(注:Robotium和MonkeyRunner是Android平台最流行的两款开源测试工具)。这种直接在代码级操作的做法,尽管能毫无阻拦的拿到任何想要的对象信息,但是也有几点待商榷之处:1.对于测试工程师直接来到代码级进行操作,从代码安全性考虑,这并不是对于所有企业都可行;2.这种做法仅限于Android应用,不能做到像图片识别那样跨平台。当然,对于iOS引用来说,是否需要花力气去做自动化测试,还是可以商议的,毕竟它的设备种类不太多,省去了许多兼容性测试的成本。 第三种是DroidPilot的做法,即上面《前置条件》章节提到的通过签名模式与被测应用取得通信。这种做法虽然也是仅限于Android平台,但毕竟可以抛开源码,更贴近于测试工程师的工作行为。然而,正如所提到的,这种做法难免遭遇“扰码”的阻碍。所以,用这种方式做自动化测试,必须要求被测应用不能加任何扰码信息。其实这里还有一点是关于反编译之后,被测应用的行为是否会发生改变的问题。这里可以确定的是,由于反编译之后,仅仅是改变了被测应用与测试工具之间的临时签名信息,对于被测应用压缩包中的信息并无任何改动,所以,被测应用的行为是可重复、可验证的。 2. 脚本编辑器–构建测试脚本、解析测试脚本 对于PerfectoMobile,由于它是以纯Web方式操作,即脚本的编辑和执行都是在浏览器端操作,这样可以让客户免于安装客户端。他在Web端提供了一种脚本设计器,可以通过拖拽设备模拟按键(如打电话,发短信,音量键、返回键等)到设计窗口,编排顺序以产生测试用例。近年PerfectoMobile又提供了HP QTP插件,使用户可以用QTP来制作脚本,并把做好的脚本上传到他们的网站,借助他们的设备来执行脚本。所以,这款工具的脚本构造能力还是相当强大的。而且,由于与QTP结合,使得自动化测试工程师更能平滑的从桌面应用程序自动化测试过渡到移动应用自动化测试。 TestDroid则通过流行的开源工具Eclipse作为脚本编辑器。它以Eclipse插件的形式存在。通过该插件来录制脚本、回放脚本。录制的脚本可以生成Robotium或MonkeyRunner脚本语言。这些脚本语言对于开发工程师来说也许会很熟悉,因为有不少安卓开发工程师自己也会用这些工具来制作一些简单的自动化测试脚本用于每日脚本构建(Daily Build)后的冒烟测试(Smoke Test)。对于测试工程师来说,上手这类Jave或Python语言视乎要比QTP所用的VB Script要稍微吃力一点,且对于Eclipse这类开发工具的使用熟练程度也不及QTP。尽管如此,对于在语言和工具的学习曲线这方面的开销,比起日后Eclipse所能提供的强大而灵活的脚本编辑能力来说,应该也是值得的。 DroidPilot则是完全自己开发的脚本解析器,选用的语言也是VB Script。而且它也提供了一种脚本设计器,这种设计器可以通过点选界面对象和针对对象的操作,来构建测试流程,并把设计好的测试流程转换成为脚本语言。这种设计器虽然可以快速构建简易的测试流程,但是对于复杂一点的测试逻辑,还需要测试工程师自己在脚本中完善。但无论如何,这个动作已经大大简化了测试工程师的代码量,且操作效率甚至比录制更灵活,因为它可以在任意操作步骤之间增加或删减步骤,且能调整操作步骤的前后顺序。 3. 并发控制多台设备–脚本一次编译,可跨设备执行 PerfectoMobile号称拥有市面上所有智能手机(iOS, Android, Blackberry…),而且这些手机部署在全球不同国家。用户登录Web控制台后,可以对这些手机进行任意操作:打电话、发短信、安装/卸载被测应用等。它不但等做到测试脚本跨设备执行,甚至还可以跨平台执行,因此,可以说,他在兼容性测试方面还是考虑的比较全面的。然而,似乎有一点遗憾的是,制作好的脚本并不能并发的在多台设备上执行,而是需要手工选择设备执行。而且,对于被测应用的部署也是一样的,缺乏批量部署这样的功能。这可能限制了并发性兼容性测试的工作效率。 TestDroid由于是使用Eclipse插件形式工作,这个插件在录制和回放脚本的时候同一时间只能链接一台机器。尽管这样做对于脚本的编辑和调试来说已经够用了,但还无法满足批量设备的兼容性测试。因此,他们又额外开发了一个在线平台,用户只需要将开发好的脚本和被测应用上传到他们的服务器,这些应用和脚本就会被自动部署于服务器端的大量安卓设备,并执行测试。最后,用户会收到兼容性测试报告。 DroidPilot有专门的脚本编辑工具Script. Designer,而且这个工具也是限定了只能连接一台设备进行脚本编辑和回放。如果需要连接多台设备进行兼容性测试的话,就需要用到DroidPilot的另一款工具——AutoRunner。通过这款工具,用户可以将多个脚本在多台设备上执行回放,还可以设置按设备顺序回放,还是多设备并发回放。并且还能自定义回放起始时间。 4. 与其它测试工具的整合–测试用例管理、缺陷跟踪 PerfectoMobile在Web端是没有整合任何测试管理工具的,纯粹是提供设备给用户使用,用于制作测试脚本和回放。近年由于新开发的QTP Plug-in,使得它能借助HP测试管理工具Quality Center用于管理测试脚本和跟踪缺陷。 TestDroid由于走的是开源工具路线,可以借助Eclipse的相关插件来达到管理测试脚本的效果。例如,使用Eclipse的svn插件,可以使得脚本保存于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的另一款工具AutoRunner。通过它,用户可以同时选中多个脚本,并在多台设备上执行。而且用户也可以控制脚本的执行起始时间,使用户可以定时执行脚本。 更多考虑 评估自动化工具的引入对现有项目进度的影响 团队工作模式的变化 如下图,传统模式,测试工程师可能在第一轮测试才有一次Full Test,在后续的回归测试中,可能只能做到部分回归。
结论 android自动化测试辅助工具Weinre
Weinre是一个类似于普通浏览器的inspector功能的一个软件工具。 1.
调研的目的:我们在写android自动化测试用例涉及到webview的时候,抓取页面元素非常苦恼。 2.
优劣对比: 3.
支持多平台:同时支持android和IOS系统 4.
下载安装包:https://github.com/phonegap/weinre/archives/master
5.
在server端需要有java环境,使用java命令启动server: java -jar
weinre.jar –httpPort 8081 链接上server的client端: 可以通过左上角的几个toolbar对webview进行操作。 通过Elements tool可以获取页面元素: 从事android手机测试一年了,也从中学到了很多的东西,乘现在项目有点空闲,总结一下,也算是慢慢培养下自己的总结能力吧,嘿嘿,废话不多说,干正事。 1.我第一个接触到的就是robotium框架,Robotium是一款测试Android App的测试框架,它使得编写黑盒测试代码更加容易和稳定。它其实是对android自带测试类Instrumentation的一个封装,方便于测试人员直接调用封装好的接口。通过使用Robotium,测试用例开发人员能够跨越多个Activity,开发出功能,系统以及验收测试用例。不过我们用到后期发现,签名是比较繁琐的,因为开发的测试包(apk格式)和测试对象的应用签名不匹配,导致测试包无法运行,当然我们可以使用重签名工具,后面具体说。 2.因为robotium的签名太繁琐,所以最后又试了下monkeyrunner工具。使用monkeyrunner时,必须配合着python。monkeyrunner是官网提供的工具,提供了一些api,可参见官网,这个用到后来发现也有很大的弊端,因为方法基本上就是那么几个,直接对应用的坐标进行点击,如果坐标定位的不准确,那么后面的脚本就无法继续运行。所以也比较纠结,但是测试一些简单的功能是没问题的了,而且开发速度比较快。 3.使用网上第三方开发的测试工具。android自动化测试工具现在不多,但是已经有很多软件可以使用了,如seeTest、aster等工具,seeTest工具蛮不错的,就是需要钱,嘿嘿,如果有其他方法比如来个破解啥的,那就牛了,seeTest工具提供了手机直接录制脚本的功能,不需要任何开发经验的人都能使用,适合黑盒的同学们。另外aster工具是免费开源的,大家有空可以google下。 4.monkey测试,也是官网提供的,这个百度下就可以了,很多的。可以对系统的健壮性做一个评估,也可对一些应用进行压力测试嘛,他就是模仿用户随便对手机点啊点的,就好像你有个手机,但是被你家的3岁娃给拿去了,那他就会乱点啊点的,搞不好就点出死机来了。 1.excel的使用,这个对报告的整理很重要,还有很多数据的处理,图形的生成,如果使用宏就简单的多了,这也算是自动化的一个方面吧。 2.shell脚本的基本写法和批处理的基本写法,之所以是说基本写法,就是不需要掌握太深入,知道一些简单的命令和语法规则,这个也是基本技能之一,从网上多搜搜就可以了。 3.python脚本的写法,这个主要是和monkeyrunner配合使用,掌握基本语法就可以了。 4.android开发的基本知识,不需要太牛b,否则直接干开发得了,知道怎么新建项目就可以了,然后套用robotium的框架,就能使用robotium写一些简单的功能测试用例了。
|
|