文档库 最新最全的文档下载
当前位置:文档库 › Android自动测试之monkeyrunner工具

Android自动测试之monkeyrunner工具

Android自动测试之monkeyrunner工具
Android自动测试之monkeyrunner工具

Android自动测试之monkeyrunner工具

monkeyrunner工具

前言:

最近开始研究Android自动化测试方法,对其中的一些工具、方法和框架做了一些简单的整理,其中包括android测试框架、CTS、Monkey、Monkeyrunner、benchmark、其它test tool等等。因接触时间很短,很多地方有不足之处,希望能和大家多多交流。

一、什么是monkeyrunner

monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。

二、monkeyrunner工具同Monkey工具的差别

Monkey:

Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流。

monkeyrunner:

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

三、monkeyrunner的测试类型

1、多设备控制:monkeyrunner API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。

2、功能测试:monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。

3、回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。

4、可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python 模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunner API 之外,您还可以使用标准的Python os和subprocess模块来调用Android Debug Bridge这样的Android工具。

四、运行monkeyrunner

您可以直接使用一个代码文件运行monkeyrunner,抑或在交互式对话中输入monkeyrunner语句。不论使用哪种方式,您都需要调用SDK目录的tools子目录下

的monkeyrunner命令。如果您提供一个文件名作为运行参数,则monkeyrunner 将视文件内容为Python程序,并加以运行;否则,它将提供一个交互对话环境。monkeyrunner的命令语法为:

monkeyrunner -plugin

五、实例

以sample中的ApiDemos为例,先将其生成ApiDemos.apk。

前提:已有device连接

1、将ApiDemos.apk放在$Android_Root\tools下。

2、在$Android_Root\tools下新建一个monkeyrunnerprogram.py文件,里面内容为:

1# Imports the monkeyrunner modules used by this program

2

3from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, M onkeyImage

4

5# Connects to the current device, returning a MonkeyDevice object 6

7device = MonkeyRunner.waitForConnection()

8

9# Installs the Android package. Notice that this method returns a b oolean, so you can test

10

11# to see if the installation worked.

12

13device.installPackage('./ApiDemos.apk')

14

15

16# Runs the component

17

18device.startActivity(component='com.example.android.apis/.ApiDemos ')

19

20

21# Presses the Menu button

22

23device.press('KEYCODE_MENU','DOWN_AND_UP')

24

25

26# Takes a screenshot

27

28result = device.takeSnapshot()

29

30

31# Writes the screenshot to a file

32

33result.writeToFile('./shot1.png','png')

注意:SDK上的例子有些错误,不可直接复制,否则执行命令时会发生错误。具体可与我的上面这段代码对照。

3、打开命令行转到Android_Root\tools目录下运行一下命令:monkeyrunner monkeyrunnerprogram.py

110307 15:33:19.625:I [main]

[com.android.monkeyrunner.MonkeyManager] Monkey Command: wake. 110307 15:33:20.625:I [main]

[com.android.monkeyrunner.MonkeyManager] Monkey Command: wake. 110307 15:33:21.625:I [main]

[com.android.monkeyrunner.MonkeyManager] Monkey Command: wake. 110307 15:33:22.718:S [pool-1-thread-1]

[com.android.monkeyrunner.adb.AdbMonkeyDevice] Error starting command: monkey --port 12345

110307 15:33:22.718:S [pool-1-thread-1]

[com.android.monkeyrunner.adb.AdbMonkeyDevice]com.android.ddmlib.S hellCommandUnresponsiveException

110307 15:33:22.718:S [pool-1-thread-1]

[com.android.monkeyrunner.adb.AdbMonkeyDevice] at

com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java: 408)

110307 15:33:22.718:S [pool-1-thread-1]

[com.android.monkeyrunner.adb.AdbMonkeyDevice] at

com.android.ddmlib.Device.executeShellCommand(Device.java:276) 110307 15:33:22.718:S [pool-1-thread-1]

[com.android.monkeyrunner.adb.AdbMonkeyDevice] at

com.android.monkeyrunner.adb.AdbMonkeyDevice$1.run(AdbMonkeyDevi ce.java:89)

110307 15:33:22.718:S [pool-1-thread-1]

[com.android.monkeyrunner.adb.AdbMonkeyDevice] at

java.util.concurrent.Executors$RunnableAdapter.call(UnknownSource) 110307 15:33:22.718:S [pool-1-thread-1]

[com.android.monkeyrunner.adb.AdbMonkeyDevice] at

java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)

110307 15:33:22.718:S [pool-1-thread-1]

[com.android.monkeyrunner.adb.AdbMonkeyDevice] at

java.util.concurrent.FutureTask.run(Unknown Source)

110307 15:33:22.718:S [pool-1-thread-1]

[com.android.monkeyrunner.adb.AdbMonkeyDevice] at

java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)

110307 15:33:22.718:S [pool-1-thread-1]

[com.android.monkeyrunner.adb.AdbMonkeyDevice] at

java.util.concurrent.ThreadPoolExecutor$Worker.run(UnknownSource) 110307 15:33:22.718:S [pool-1-thread-1]

[com.android.monkeyrunner.adb.AdbMonkeyDevice] at

https://www.wendangku.net/doc/9d5317660.html,ng.Thread.run(UnknownSource)

110307 15:33:57.437:I [main]

[com.android.monkeyrunner.MonkeyManager] Monkey Command: press KEYCODE_MENU.

110307 15:33:59.171:I [main]

[com.android.monkeyrunner.MonkeyManager] Monkey Command: quit.

注:里面exception的提示我们可以忽略,因为我们可以看见 Monkey Command: press KEYCODE_MENU已经执行成功。

4、可以Android_Root\tools下查看生成的shot1.png的截图。

六、实例扩展

因为ApiDemos首页上按下MENU键没有菜单出现,为了更加形象化,在实例五的基础上继续试验:

1、在$Android_Root\tools下新建一个monkeyrunnerprogram1.py文件,里面内容为:

1# Imports the monkeyrunner modules used by this program

2

3from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, M onkeyImage

4

5# Connects to the current device, returning a MonkeyDevice object

6

7device = MonkeyRunner.waitForConnection()

8

9# Takes a screenshot

10

11result = device.takeSnapshot()

12

13# Writes the screenshot to a file

14

15result.writeToFile('./shotbegin.png','png')

16

17# Presses the Down button

18

19device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')

20

21device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')

22

23device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')

24

25device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')

26

27device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')

28

29# Takes a screenshot

30

31result = device.takeSnapshot()

32

33# Writes the screenshot to a file

34

35result.writeToFile('./shotend.png','png')

2、将画面定位在Apidemos的首页,并将光标定位在第一项上。

3、在$Android_Root\tools目录下运行一下命令:

monkeyrunner monkeyrunnerprogram1.py

4、在运行过程中我们可以看见光标不断向下移动,并且可以在当前目录下我们自定义的截图:

运行前:shotbegin.png

运行后(做了五次下移操作):shotend.png

参考资料:

https://www.wendangku.net/doc/9d5317660.html,/guide/developing/tools/monkeyrunner_conc epts.html

android自动化测试之道

Android自动化测试之道 文/杨丰盛 随着越来越多的手机厂商、运营商、开发商加入android阵营,带来了各种美化和定制的android系统,同时android market应用数量增长迅速。这都离不开测试,android 自动化测试的需求愈加迫切。 测试主要分为白盒测试和黑盒测试两大类。Android虽然在测试方面还不够完善,但也提供了各种途径来完成相应的测试模块。白盒测试通常需要配合软件的源码来进行,测试人员须根据产品的功能和性能等需求编写测试用例,并根据测试用例逐一进行测试。这里我们主要探讨在没有源码的情况下如何进行黑盒测试。既然没有源码,那么我们就需要使用android所提供的工具包来获取应用程序上的各种UI元素,并向其发送各种操作事项。此外,我们还可以借助各种开源项目,比如ASE等。下面分别介绍几种目前最可行的自动化测试解决方案。 Android兼容性测试 Android的各个版本之间都有不同程度的差异,因此google专门针对各个版本(android2.1以上)提供了兼容性测试工具CTS(compatibility test suite),其中共有两万多个测试用例,包括功能测试和性能测试等。CTS最初只对OHA联盟开放,后来便和android开源项目一起发布了,并且所有手持设备都必须通过android兼容性测试,才能确保在android上开发的应用程序能够在android设备上运行,才能使用android market。 要使用CTS进行兼容性测试,就必须先下载和编译CTS,下载方式可以选择下载完整的android源码(位于$ANDROID/cts目录中)和只下载CTS源码(注:CTS源码下载地址为git://https://www.wendangku.net/doc/9d5317660.html,/platform/cts.git);然后可以使用如下命令来编译CTS: //配置选项 $ build/envsetup.sh //编译cts $ make cts 编译完成之后会将结果输出到“$ANDROID/out/host/linux-x86/”目录中,然后可以启动模拟器或手持设备(需使用root权限来操作),并进入其bin目录。使用“./cts” 命令来启动CTS测试,显示CTS测试版本和设备连接状态,这时可以输入“help”命令来查看CTS的操作帮助信息。 如果输入“ls--plan”命令可以查看所有的plan(注:plan文件夹为cts/android-cts/repository/plans),在其中可以看到8个测试基类,比如android.xml、appsecurity.xml、CTS.xml等。其中所有基类里包含的package都给出了相应的uri,cts 将根据这些uri去测试每个基类里的package,可以输入如下一些命令来测试某些

Android测试环境搭建

基本安装 一、Java JDK 1、Java JDK下载: 网页: https://www.wendangku.net/doc/9d5317660.html,/javase/downloads/index.jsp 选择 Download JDK 只下载JDK,无需下载jre.(因为按照JDK会自动按照jre) 2、JDK 运行 可以不安装在C盘(系统盘) 安装完成后 3、环境变量 如果只是运行eclipse不需要修改环境变量 如果要用到monkeyrunner需要设置环境变量(改系统环境变量),如下 新建系统环境变量JAVA_HOME ,设置为java安装地址"D:\Program Files\java\jdk1.6.0_33" PATH 增加 ";%JAVA_HOME%\bin" CLASSPATH = ".;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar",没有CLASSPATH需要新增

4、验证环境变量 java-version 如果装在C盘直接运行java-version 二、Eclipse 进入该网页: https://www.wendangku.net/doc/9d5317660.html,/downloads/下载解压缩后放在根目录,不要放在中文文件夹里面三、Android SDK

地址:https://www.wendangku.net/doc/9d5317660.html,/sdk/index.html 说明: Android SDK两种下载版本,一种是包含具体版本的SDK的,一种是只有升级工具,而不包含具体的SDK版本,后一种大概20多M,前一种70多M。 解压android sdk 这个也无需安装,解压后供后面使用 Eclipse配置 一、安装android 开发插件 (1)打开Eclipse, 在菜单栏上选择 E:\eclipse-java-juno-win32-x86_64\eclipse下,可以创建桌面快捷方式help->Install New SoftWare 出现如下界面:

Android APP测试流程

Android APP测试流程 一、 Monkey测试(冒烟测试) 使用monkey测试工具进行如下操作: 1. APP的安装 2. APP随机操作测试(APP压力测试) 3. APP的卸载 二、安装卸载测试 1. 使用测试真机进行APP的安装与卸载 2. 使用第三方软件辅助安装与卸载

三、升级测试 1. APP的在线升级安装及使用测试 目的: 1. 验证签名是否一致 2. 跨版本升级是否正常 四、功能测试 1. 功能逻辑测试 2. 功能点测试(单元测试) 3. 关联性测试(集成测试) 五、自动化测试 1. monkeyrunner编写python脚本测试(现阶段使用小萝贝与按键精灵代替) 六、联机调试测试 1. 使用Eclipse进行Android Debug真机调试 2. 通过Logcat记录每一步操作,定位错误代码 七、稳定性测试 1. 交互性测试 2. 异常性测试(手机断电、断网情况) 八、手机流量、电量、内存测试

1. 测试机使用监控软件观察APP使用所耗的流量 2. 测试机使用监控软件观察APP耗电量 3. 测试机使用监控软件观察APP占用内存情况(不能泄露内存) 九、性能测试(Loadrunner) 1. 接口测试 2. 服务器压力测试 十、适配性测试(兼容性测试,目前使用testin云测) 1. 分辨率 2. 系统版本 3. 厂商定制系统 4. 屏幕尺寸 十一、界面易用性测试 1. 界面与交互测试(交互规范、用户体验、易用性等) 2. 可用性测试(可用性强、操作简单、出错率低、完成任务时间短等)十二、外网测试 1.使用WIFI和手机网络2G/3G/4G网络测试APP

Android性能分析工具常用汇总

Android性能分析工具常用汇总 Android性能分析工具整理汇总 把做Android开发以来碰到的一些不错的性能分析工具做个整理汇总... Debug GPU Overdraw 类型:系统自带功能UI渲染检测功能(打开Settings,然后到Developer Op tions -> Debug GPU Overdraw 选择Show overdraw areas,手机系统设置中文的孩纸,自行对照翻译进去哈) 作用:用来检测UI的重绘次数,开发者可以用来优化UI的性能。 使用心得:检测UI性能的利器,对于开发者做UI优化的帮助挺大的。因为大量的重绘容易让app造成卡顿或者直接导致丢帧的现象。开发者熟悉View的绘制原理可以结合对一些布局或者自定义控件做相应的优化。诸如:在ListView或GridView里面的item使用layout_weight设置就会造成多余重绘。其他情况还有很多,不一一例举。至于怎么用,可以自行Google Profile GPU Rendering 类型:系统自带功能UI渲染检测功能(打开Settings,然后到Developer Op tions -> Profile GPU Rendering. 选择On screen as bars ) 作用:用来检测UI绘制帧的速率和耗时,同样开发者可以用来优化UI的性能。使用心得:跟Debug GPU Overdraw功能类似,但它反应的是UI绘制帧的速率,同样可以用来检测自己的app是否丢帧或者绘制过度,具体操作可以自行G oogle Hierarchy Viewer 类型:SDK自带工具(打开Settings,然后到Developer Options -> Profil e GPU Rendering. 选择On screen as bars ) 作用:检测UI渲染用的 使用心得:老牌工具了,Google一下

Android_自动化测试

Android自动化测试初探-1:捕获Activity上的Element 第一部分:前言 Android系统下应用程序的测试现在应该还算是个新的领域,网上关于这方面的资料很多都是基于白盒测试的,一般都是基于JUnit框架和Android SDK中android.test等命名空间下的内容进行,但是有一个前提,那就是必须要有应用程序的源代码以提供测试接入点,但是这在很多软件公司中是不现实的。很多测试工程师做的工作是完全黑盒,基本接触不到源代码,白盒测试大部分也是由开发自己完成。 回顾一下Windows下的黑盒测试自动化,先前使用的是微软提供的基于.net framework的UI Automation自动化测试框架(要求版本在.net framework3.0以上,即https://www.wendangku.net/doc/9d5317660.html, 2008开发环境),对与擅长C#语言的人来说,使用起来确认比较好用。本人也写了基于UI Automation的轻量级的自动化框架,将在以后的博文中引出。 那在Android操作系统中能不能做类似于UI Automation的事情呢?不幸的是,Android的权限控制分的非常清楚,不同程序之间的数据访问只能通过Intent,content provider类似的功能实现。也就是说你开发的运行在Android中的自动化程序想要捕获当前运行的AUT(Application under Test)界面上的控件等Element(该术语引自UI Automation,觉得翻译成元素有点生硬,故不作翻译)基本不可能,你也拿不到当前active activity的引用(截止本文发帖为止,个人暂时没有找到办法获得此引用)。 无路可走了?模拟器里面不能走,外面能不能走?或许可以。 第二部分:捕获Activity上的Element 在Android的SDK中自带了一个对自动化测试比较有用的工具:hierarchyviewer(位于SDK的tools目录下)。在模拟器运行的情况下,使用该工具可以将当前的Activity上的Element以对象树的形式展现出来,每个Element所含的属性也能一一尽显。这有点像Windows上运行的UI SPY,唯一遗憾的是不支持事件的触发。不过没有关系,可以想办法绕,当务之急是能在自行编写的自动化测试代码里找到Activity上的Element。 第一个想到的办法就是看hierarchyviewer源码,不巧,网上搜了一下,没有资源。或许Google的官网上有,但是上不去。看来只能反编译了,找来XJad,暴力之。虽然反编译出来的代码很多地方提示缺少import,但代码基本上是正确的。看了一下,确实也知道了许多。后来在编写代码的过程中,确实也证明了如果想引用hierarchyviewer.jar这个包并调试,还是需要知道里面的一些设置的。 创建基于hierarchyviewer.jar这个包的调用,需要将它和另外两个包,ddmlib.jar(在hierarchyviewer.jar同级目录中有)和org-netbeans-api-visual.jar(需要下载并安装netbeans,在其安装目录中有)一并导入到工程项目中,因为hierarchyviewer的实现依附于这两个包。 想在代码中获取Activity上的Element需要进行如下几个步骤(如果使用过hierarchyviewer这个工具后会发现,自动化代码所要写的就是该工具上的使用步骤):

Android测试教程(全)

Android测试教程 目录 Android测试教程 (1) Android测试教程(1):概述 (1) Android测试教程(2):测试基础 (2) Android测试教程(3):测试项目 (3) Android测试教程(4):测试相关API (6) Android测试教程(5):第一个测试项目HelloWorldTest (8) Android测试教程(6):测试Activity (11) Android测试教程(7):测试Content Provider (12) Android测试教程(8):测试Service (13) Android测试教程(9):ApplicationTestCase示例 (13) Android测试教程(10):ActivityInstrumentationTestCase2示例 (17) Android测试教程(11):ActivityUnitTestCase示例 (18) Android测试教程(12):ServiceTestCase示例 (20) Android测试教程(13):TestCase示例 (22) Android测试教程(14):ActivityInstrumentationTestCase2示例 (23) Android测试教程(15):AndroidTestCase示例 (25) Android测试教程(16):monkeyrunner简介 (27) Android测试教程(17):Monkey 命令行工具 (28) Android测试教程(18):总结 (32) 来源: csdn 作者:mapdigit Android测试教程(1):概述 测试也是开发过程中一个重要组成部分,Android开发环境集成一个测试框架可以用来测试Android应用的各个方面,单元测试,UI测试等。 本教程基于Android 开发教程英文版。 基本概念包括 ?Android测试的基础知识 ?Activity Testing 侧重于Activity的测试,介绍了如果使用Instrumentation 在正常Activity生命周期之外来控制Activity,然后测试Activity的特定的功能和测试UI 的一些技巧。

Android自动化测试工具简介

Android自动化测试工具简介随着Android的流行和发展,基于Android的应用开发越来越多,相应的测试方法和测试工具也越来越多,掌握好这些测试工具对测试团队提高工作效率有很大的帮助,本文将就Android平台上的几款常用的测试工具进行简单介绍。Instrumentation Instrumentation是Android系统提供的基于junit的自动化单元测试框架,它提供了对Android系统API和对象的访问接口,可以控制和检查应用程序、模拟用户操作、获取系统状态,实现对应用程序或系统的功能、性能、UI、API 等的自动化测试。Instrumentation框架通过将主程序和测试程序运行在同一个进程来实现这些功能。 图1:引用自:

https://www.wendangku.net/doc/9d5317660.html,/guide/topics/testing/testing_android.html 1)测试类型 要对Android应用程序进行单元测试有三种方法: 第一,基于Junit的单元测试,这个测试运行在JDK下,测试一些和android 无关的东西,比如业务逻辑,数据封装,数值计算等等。 第二,基于AndroidTestCase,不使用Instrumentation框架,但可以访问系统对象如Context,通过Context可以访问到资源,文件,数据库等。 第三,基于InstrumentationTestCase,使用Instrumentation框架,入口是InstrumentationTestRunner,这是一个没有图形界面的,具有启动能力的,用于监控其他类的工具类。 2)主要测试类 Android系统的单元测试框架位于包android.test中,其核心类图具有如下结构:

在Mac上搭建Android 自动化测试的测试环境 (2)

在Mac上搭建Android 自动化测试的测试环境 一、 1.该环境搭在了本地的一台MacBook上,序列号:C02F302EDC79 2.使用的自动化测试工具是appium 3.搭建环境的步骤 1.在terminal 终端里面运行命令brew install node 2.在terminal 终端里面运行命令npm install -g appium 3.在terminal 终端里面运行命令npm install wd 对这三个命令的解释:第一个是安装node.js,这个命命令需要更新一下.它对版本的要求比较高,为了兼容性考虑,最好安装版本0.12第二个是安装appium ,第三个是安装appium client ,如果运行的时候报错,可以尝试在命令的前面加上sudo 4.安装JDK7 地址: https://www.wendangku.net/doc/9d5317660.html,/technetwork/java/javase/downloads/jdk7-downloads-1880260. html 5.安装android sdk地址: https://www.wendangku.net/doc/9d5317660.html,/sdk/index.html 对于这个步骤你可以选择安装Android STUDIO 也可以只安装stand-alone sdk tools 然后再添加你需要的sdk packages 比如:platform tools 我是安装了Android studio ,然后又添加了一些sdk packages, 添加sdk packages 的方法: https://www.wendangku.net/doc/9d5317660.html,/sdk/installing/adding-packages.html sdk tools 所在的位置是:/users/testuser/Library/Android/sdk 其中的Library 是隐藏文件夹,如果想进去看点击mac 右上角的Go->Go to Folder: 输入~/Library/ 6.在.bash_profilel里面为JAVA_HOME和ANDROID_HOME设置路径: 在terminal 终端里面运行命令vi ~/.bash_profile 进入profile界面后按I 进入编辑模式,然后设置路径为: export JAVA_HOME="$(/usr/libexec/java_home -v 1.7)" export ANDROID_HOME="/users/testuser/Library/Android/sdk" 然后按esc 返回到normal 模式,用命令:wq退出并保存 保存后如果想让它生效用命令source /.bash_file Notes:机器不一样所以遇到的问题也不一样,如果你运行brew install node 提示你每天brew command ,那你需要搜一下把brew给装好。当你运行npm install -g appium的时候有可能安装失败,首先用sudo 试试,如果这样安装还是失败,看看log 我失败一次的经历是安装一个插件失败了好像是什么library 安装不了,这个时候如果有开发就去问问开发,如果不愿意问就自己先在google上搜索下,如果安装这个插件。搭测试环境这步是基础所以一定得搭好,走不下去问开发是正常的。 7.经过上面的1-6步以后基本环境以及搭建完毕。这时候去Download sample code 地址:https://https://www.wendangku.net/doc/9d5317660.html,/appium/sample-code 在terminal 终端里面运行命令git clone https://https://www.wendangku.net/doc/9d5317660.html,/appium/sample-code 我把sample code 放在了桌面的appium example 里面。里面的内容下面的截图

Android自动化测试之Uiautomator_UiDevice-API详解

Android自动化测试之 Uiautomator-UiDevice-API详解 范翰卿整理 联系邮箱:fanhq1@https://www.wendangku.net/doc/9d5317660.html, [在此处键入]

目录 UiDevice-API (2) 1.click (2) 2.freezeRotation (2) 3.getCurrentPackageName (3) 4.getDisplayHetght与getDisplayWidth . 3 5.getDisplayRotation (3) 6.getDisplaySizeDp (4) 7.getProductName (5) 8.监听器 (5) 9.按键事件 (8) 10.旋转 (9) 11.锁屏与唤醒 (10) 12.等待对象 (11) 13.截图 (12) 14.拖拽与滑动 (12) 15.通知栏.快速设置 (13) 16.窗口布局结构 (13)

UiDevice-API uidevice提供关于设备的状态信息。你也可以使用这个类来模拟装置上的用户的行为,如按方向键或按菜单按钮。 1.click . 例子: 点击坐标点(300,300) UiDevice.getInstance().click(300,300); 或getUiDevice().click(300,300); 推荐使用上面的UiDevice.getInstance()进行书写,如果使用下面的书写,在同一个类中没问题,如果要在其他类中的方法使用了getUiDevice,调用到本类中不会有语法错误,但是执行的时候会出错。以下也是如此,不再写getUiDevice。 2.freezeRotation 例子:

Android 自动化测试 UiAutomator2 AndroidJUnitRunner_w

AndroidJUnitRunner 文章概要 ?AndroidJUnitRunner介绍 ?Instrument测试命令 ?AndroidJUnitRunner过滤器与例子 ?AndroidJUnitRunner参数 一、AndroidJUnitRunner介绍 AndroidJUnitRunner ?是一个测试运行器,用于运行Junit3和Junit4的Android测试包 ?替换InstrumentationTestRunner ?支持InstrumentationTestRunner的所有特性,但又进行了扩展 ?保持所有InstrumentationTestRunner的命令格式 继承关系 https://www.wendangku.net/doc/9d5317660.html,ng.Object android.app.Instrumentation android.support.test.runner.MonitoringInstrumentation android.support.test.runner.AndroidJUnitRunner 二、Instrument测试命令 掌握命令是关键,掌握命令也未自行开发运行于测试工具的关键,掌握命令最重要的就是可以随心所欲的执行测试。 命令使用格式: am instrument [-r] [-e ] [-p ] [-w] [--user | current] [--no-window-animation] [--abi ] 其中COMPONENT格式:包名/运行Runner

例如:运行所有用例命令例子: adb shell am instrument -w com.jikexueyuan.test/android.support.test.runner.AndroidJUnitRunner 三、AndroidJUnitRunner过滤器与例子 过滤器 过滤器是指运行测试过程中,可以按照自己的需要进行测试。下表为支持官方支持的过滤器说。

【自动化测试技术】如何在Android手机上进行自动化测试(三)【转载】

如何在Android手机上进行自动化测试(三) 如何使用Poco对Android原生应用进行测试 Poco支持直接对任何Android原生应用(非游戏引擎,非webview)进行UI层次结构识别,用法上与Poco在其他平台上一模一样。 在AirtestIDE的Poco Assistant面板中选择Android模式之后,AirtestIDE会开始自动向手机里安装Pocoservice.apk和Pocoservice-test.apk,部分型号手机需要手动点击确认安装才能顺利安装。 安装完成后,AirtestIDE会自动启动PocoService,它会定时抓取Android上界面的层次结构信息,稍等片刻就可以在AirtestIDE界面中看到当前界面的UI结构结构树。 如果Pocoservice启动失败,会导致Pocoservice.apk反复重装,此时可以检查以下几个方面: 是否有Android版本过低,Poco支持≥19,Android SDK API即Android 4.4及以上 请关闭PC或手机上连接的网络代理代理,否则可能导致连不上Poco 可以尝试卸载手机中的2个Pocoservice相关的APK后,手工重新安装一遍,在poco\poco\drivers\android\lib目录下能够找到这两个APK 部分vivo和oppo手机需要将手机设置-输入法设置中,把Yosemite输入法设置为替换输入法+当前输入法

一个使用计算器的例子 在这里我们提供一个使用Poco对一个计算器应用编写代码的例子,并同时将App安装到手机上。 按照前面说的,在AirtestIDE中的Poco辅助窗口拖放菜单中选择Android后,AirtestIDE将自动启动Pocoservice,显示出当前的UI控件结构树。此后就可以在AirtestIDE中进行Poco语句的编写和录制了。 代码示例 下面这段代码示例将演示一个简单的功能:点击计算器的界面,实现一个1 + 1 = 2的运算验证。 from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco() poco('com.google.android.calculator:id/digit_1').click() poco('com.google.android.calculator:id/op_add').click() poco('com.google.android.calculator:id/digit_1').click() poco('com.google.android.calculator:id/eq').click() result = poco('com.google.android.calculator:id/formula').get_text() assert_equal(result, '2', '1+1=2 ^^')

面向android系统的测试工具

毕业论文(设计) 面向android系统的测试工具 学生姓名:于冬敏 指导教师:陈高泉讲师专业名称:电子信息工程所在学院:信息工程学院 2012年06月

目录 摘要............................................................................................................................................ I Abstract......................................................................................... 错误!未定义书签。第1章绪论 . (1) 1.1. 课题背景 (1) 1.2. 课题说明 (1) 第2章Android开发系统综述 (3) 2.1. android系统介绍 (3) 2.2. 开发环境介绍 (5) 2.3. 开发语言介绍 (7) 第3章测试工具介绍 (9) 3.1. 测试工具结构介绍 (9) 3.2. 测试工具中Service介绍 (12) 第4章总体设计 (22) 4.1. 概述 (22) 4.2. 构成 (23) 第5章设计思想 (24) 5.1. 设计思想概述 (24) 5.2. 设计原则 (25) 第6章结论. (35) 致谢 (35) 参考文献 (36) 附录 (38)

摘要 基于Android 的自动化测试的设计与实现以Android 客户端的测试为研究内容,分析了Android 自动化测试框架及其层次关系,尝试在现有测试方法的基础上进行测试手段的优化和创新。研究了基于JUnit 和instrumentaion 的Android 自动化框架的实现技术,并利用Hudson 进行集成,实现Android 的自动化测试。产品的开发实践表明, 这种自动化测试方法效率高、用户体验好, 对于Android 的自动化测试研究具有一定参考价值。Android应用程序使用Java做为开发语言,把编译后的Java代码连同其它应用程序需要的数据和资源文件一起打包到一个Android包文件中,这个文件使用.apk做为扩展名,它是分发应用程序并安装到移动设备的媒介,用户只需下载并安装此文件到他们的设备。单一.apk文件中的所有代码被认为是一个应用程序。 关键词:关键词:测试自动化;Android;设计

android的测试方法

Android 调试桥 https://www.wendangku.net/doc/9d5317660.html,/docs/reference/adb.html#sqlite Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器的状态。 可以通过下列几种方法加入adb: ?在设备上运行shell命令 ?通过端口转发来管理模拟器或设备 ?从模拟器或设备上拷贝来或拷贝走文件 下面对adb进行了介绍并描述了常见的使用. Contents 概要 发出adb命令 查询模拟器/设备实例 给特定的模拟器/设备实例发送命令 安装软件 转发端口 从模拟器/设备中拷入或拷出文件 Adb命令列表 启动shell命令 通过远程shell端运行sqllite3连接数据库 UI/软件试验程序 Monkey 其它的shell命令 启用logcat日志 使用logcat命令 过滤日志输出 控制日志输出格式 查看可用日志缓冲区 查看stdout 和stderr Logcat命令列表 停止adb服务 概要

Android 调试系统是一个面对客户服务系统,包括三个组成部分: ?一个在你用于开发程序的电脑上运行的客户端。你可以通过shell端使用 adb命令启动客户端。其他Android工具比如说ADT插件和DDMS同样可 以产生adb客户端. ?在你用于发的机器上作为后台进程运行的服务器。该服务器负责管理客户端与运行于模拟器或设备上的adb守护程序(daemon)之间的通信。. ?一个以后台进程的形式运行于模拟器或设备上的守护程序(daemon)。. 当你启动一个adb客户端,客户端首先确认是否已有一个adb服务进程在运行。如果没有,则启动服务进程。当服务器运行, adb服务器就会绑定本地的TCP 端口5037并监听adb客户端发来的命令,—所有的adb客户端都是用端口 5037与adb服务器对话的. 接着服务器将所有运行中的模拟器或设备实例建立连接。它通过扫描所有5555 到5585范围内的奇数端口来定位所有的模拟器或设备。一旦服务器找到了adb 守护程序,它将建立一个到该端口的连接。请注意任何模拟器或设备实例会取得两个连续的端口——一个偶数端口用来相应控制台的连接,和一个奇数端口用来响应adb连接。比如说: 模拟器1,控制台:端口5554 模拟器1,Adb端口5555 控制台:端口 5556 Adb端口5557... 如上所示,模拟器实例通过5555端口连接adb,就如同使用5554端口连接控制台一样. 一旦服务器与所有模拟器实例建立连接,就可以使用adb命令控制和访问该实例。因为服务器管理模拟器/设备实例的连接,和控制处理从来自多个adb客户端来的命令,你可以通过任何客户端(或脚本)来控制任何模拟器或设备实例. 以下的部分描述通过命令使用adb和管理模拟器/设备的状态。要注意的是如果你用,装有ADT插件的Eclipse开发Android程序,你就不需要通过命令行使用adb。ADT插件已经透明的把adb集成到Eclipse中了,当然,如果必要的话你 也可以仍然直接使用adb,比如说调试. 发出adb命令 发出Android命令:你可以在你的开发机上的命令行或脚本上发布Android命令,使用方法: adb [-d|-e|-s ]

【Android Monkey自动测试工具使用报告】

关于Android Monkey自动化测试的报告 1自动化测试背景 软件测试是软件产品开发过程中的重要环节。测试对于发现软件中缺陷,保障软件的质量具有重要意义。统计表明,软件测试的时间通常占到软件开发时间的40%,一些可靠性要求高的软件甚至高达60%以上。 手工测试和自动化测试是软件测试的两种基本手段,二者相互补充,不可相互替代。其中,自动化测试能捕捉到资源冲突、多线程、死锁等手工测试难以发现的错误,可以高效的完成大量机械性、重复性测试,能模拟大量数据或大量并发用户等应用场景,从而有效的缩短软件测试周期,提高测试的可靠性及准确度。 2什么是Monkey Monkey测试是Android自动化测试的手段之一,它通过模拟用户的按键输入、触摸屏输入等,测试设备多长时间出现异常。Monkey是一个命令行工具,可以运行在模拟器或实际设备中,通过向系统发送伪随机的用户事件流,实现对全系统或某个应用程序进行压力测试。 Monkey工具使用非常简单,直接在命令窗口键入monkey命令即可进行测试。Monkey命令有较多的配置选项,为便于理解这些命令,此处先将其命令选项简单划分为四大类,在后文中陆续介绍各种命令选项的使用,然后在附录中附上整个monkey命令选项便于查阅。Monkey命令可简单分为如下四类: 基本配置选项,如设置尝试的事件数量 运行约束选项,如设置只对单独的一个包进行测试 事件类型和频率,如设置触摸屏事件的发生频率 调试选项,如设置忽略应用程序异常,继续向系统发送事件,直到计数完成 3使用monkey进行自动化测试 Monkey命令工具可以在模拟器和实际设备上使用。这里分别对两种环境下的monkey测试进行介绍。 3.1 在模拟器上运用Monkey进行自动化测试 3.1.1 monkey命令最简单用法 首先,介绍最简单monkey命令用法,其使用格式为如下: monkey n 其中,n为一个整数,表示用于测试的伪随机事件发生的次数。 如图3.1所示,启动模拟器。然后,在命令行窗口下输入adb shell命令,如图3.2所示。登录shell之后,即可使用monkey命令。最简单的用法是,直接在其后面指定一个数字,表示向系统发送事件的数量,如图3.3所示。模拟器的测试的结果如图3.4所示。

介绍5种Android自动化测试工具

作为一名软件研发者,对于Android你肯定不会陌生。随着科技的日新月异,Android 在我们的生活中已经变得无处不在,手机就是一个最好的例子,我们现在常常都会用到手机。但是你知道Android自动化测试的工具有哪几种吗?小编现在就一一为你讲解。 随着科技的发展,现在已经有很多的Android自动化测试架构或工具可以供我们使用了,其中包括:ActivityInstrumentation,DroidPilot,MonkeyRunner,Robotium,以及Robolectric。另外LessPainful也提供了服务来进行真实设备上的自动化测试。 其实,Android自身就已经提供了对instrumentation测试的基本支持,其中之一就是位于Android.test包内的ActivityInstrumentationTestCase2类,它扩展了JUnit的TestCase类用来提供Androidactivities的功能测试。在应用测试中,每一个Activity首先都会被Instrumentation初始化,然后再加载到Android模拟器或设备的Dalvik虚拟机中来执行。 1.DroidPilot:一个新出android自动化测试工具 DroidPilot是一个自动化测试工具。它可以针对于Android平台的应用程序进行测试 脚本编辑、自动回放、结果检查、报告输出等操作,以此来缩短回归测试的时间和提升项目整体进度。测试的脚本不仅可以运行于模拟器,更可以同时运行于多台移动设备,这样更能凸显测试结果的真实性和可比性。 2.MonkeyRunner:AndroidSDK自带一个测试工具 MonkeyRunner提供的API和执行环境可以运行Python语言编写的测试代码。它提供了API来连接设备,安装、卸载应用,运行应用,截屏,比对图片来判断特定命令执行后的屏幕是否包含预期信息,以及运行对应用的测试。MonkeyRunner使用ActivityInstrumentationTestCase2,ProviderTestCase, ServiceTestCasek,SingleLaunchActivityTestCase及其他类来定义测试用例,并使用InstrumentationTestRunner类来运行测试。 3.Robotium:被称之为针对Android应用的又一个Selenium Robotium是另一种通过InstrumentationTestRunner来完成Android交互式测试的架构,它可以横跨多个activities,并且支持功能测试,系统测试和接收测试。Robotium支持Activities、Dialogs、Toasts、Menus、ContextMenus甚至Honeycomb,并且它可以同Maven和Ant集成来完成持续集成测试。 4.Robolectric:Pivotal实验室声称使用Robolectric可以在28秒内运行1047个测 试 Robolectric另辟蹊径,它并不依赖于Android提供的测试功能,它使用了shadowobjects并且运行测试于普通的工作站、服务器JVM,不像模拟器或设备需要 dexing(Androiddex编译器将类文件编译成Android设备上的DalvikVM使用的格式),打包,部署和运行的过程,大大减少了测试执行的时间。

Android性能测试

一、Android 性能测试,跟 pc 性能测试一样分为客户端及服务器,但在客户端上的性能 测试分为 2 类: ?一类为 rom 版本的性能测试 ?一类为应用的性能测试 对于应用性能测试,包括很多测试项,如启动时间、内存、CPU、GPU、功耗、流量等。但针对 rom 版本的性能测试,一般关注功耗。 先说说应用的性能测试,对于启动时间、内存、cpu 测试大家一般都使用外部提供的第三方工具来辅助测试,如GT、安测试等、这些工具的原理都是基于调用 android 底层的一些 api 来获取到测试所用到的值,当然我们也可以采用其他方法,如使用 android 本身提供的一套 adb 即可完成上述测试。 对于 GPU、功耗、等测试来说,用第三方工具测试得到的数值一般都不是很准确,这个时候我们需要引入硬件来进行测试了,GPU 可以采用高速相机来进行测试,功耗可以使用万用表或安捷伦电源仪来进行测试(ps:有硬件动手能力的可以DIY一个小板进行) 再说说 rom 版本的性能测试,rom 版本一般就关注功耗测试,不过 rom 版本的功耗测试跟应用的功耗测试会有所差异,当然只是用例设计方面的差异,工具仍然采用安捷伦电源仪进行 二、首先我们来说说启动时间。关于应用的启动时间的测试,分为三类: 1. 首次启动 --应用首次启动所花费的时间 2. 非首次启动 --应用非首次启动所花费的时间 3. 应用界面切换--应用界面内切换所花费的时间 那么如何来做启动时间的测试呢,一般我们分为2类,一类为使用软件来测试,一类为使用硬件来测试,首先我们说说软件测试的方法,可能大部分人都比较通晓使用 android 提供的 DisplayManager 来获取 activity 的启动时间吧,在这里我简单说下如何通过批处理来DIY ?通过日志过滤关键字 Displayed 来过滤所有 activity 所打印的,记录日志通过adb logcat>/address/logcat.txt 然后使用find “Displayed” /address/logcat.txt>/newaddress/fl.txt ?通过 activity 名来过滤获取所测应用find “ActivityName” /newaddress/fl.txt>/newaddress/last.txt ?通过计算 activity 最后剩余的时间之和即可(这里可以使用 excel 表格自动相加也可以使用算法,我就不详细介绍了)

Android自动化测试(UiAutomator)简要介绍

Android自动化测试(UiAutomator)简要介绍 一、一个BUG引发的问题 如果研发过程中有一个BUG:“不断的切换手机语言出现花屏现象”。这个问题我们如何验证呢?我想,最好的方式应该是自动化测试。 那么,自动化测试可以完成哪些任务呢? 简单的说,那些重复性的测试工作,都可以交给自动化完成: 1、设置手机的语言 2、添加、删除、收藏联系人 3、拨号、挂断 4、甚至发送短信、收藏短信 如果需要上面的功能,那么就开始自动化之旅吧。 二、Android自动化测试简单介绍 Android自动化测试主要分为Monkeyrunner、Rubotium、UiAutomator、Monkey(在我看来这个不算)等。主要特点: 1、Monkeyrunner:优点:操作最为简单,可以录制测试脚本,可视化操作;缺点:主要生成坐标的自动化操作,移植性不强,功能最为局限; 2、Rubotium:主要针对某一个APK进行自动化测试,APK可以有源码,也可以没有源码,功能强大;缺点是针对APK操作,而且需要对APK重新签名(有工具),因此操作相对复杂; 3、UiAutomator:优点:可以对所有操作进行自动化,操作简单;缺点:Android版本需要高于4.0,无法根据控件ID操作,相对来说功能较为局限,但也够用了; 4、Monkey:准确来说,这不算是自动化测试,因为其只能产生随机的事件,无法按照既定的步骤操作; 由上面介绍可以有这样的结论:测试某个APK,可以选择Rubotium;测试过程可能涉及多个APK,选择UiAutomator;一些简单的测试,选择Monkeyrunner; 本文主要介绍UiAutomator的使用方法。 三、环境搭建

淘宝AndroidIOS自动化测试框架

Android自动化框架在淘宝项目过程中使用情况: (一)原来发布阶段2周,每天手工回归4h,到现在自动化执行查看结果。效率提升,10*4h/每客户端每迭代 ,缩短开发测试周期。 (二)在规范流程方面:原来开发手工打包,旺旺发给测试发给运营,到现在平台自助打包,每日构建。效率提升,手工打包每个2分钟,沟通成本更高。杜绝可能出错的风险 . IOS自动化框架发展历程: (一)注入式框架:从无到有,首开先河,通过直接修改开发代码,让测试运行起来,升级日志系统,方便查看运行结果 (二)instrument js 工具包:增加稳定性,增加校验功能。增加批量执行。效率提升,从需要注入改代码,到可以直接运行app.运行稳定性提升,增加易用性。 主要在以下方面进行了扩展: 操作扩展:主要是稳定性上面的,如tap操作增加轮询元素查找。还包括便利性的扩展,如UIAPicker的选取与展示。 校验扩展 :提供更加丰富的校验功能,及校验出错提示 Log转Hudson:将UIAutomation执行后的plist结果文件,转换为hudson认识的格式。方便持续集成里展现。 (三)InstrumentDriver :纯Java环境编写用例,更好的接入现有测试系统。 效率提升,语法出错排查时间从原来的平均30分钟,减为0. 效率提升,智能感应让编写用例时间缩短30%,学习成本大幅降低。 效率提升,调试功能让出错排查时间缩短50%. 在这里先简单介绍下Instrument uiautomation,Instrumentuiautomation 是苹果官方提供的iPhone手机应用的自动化测试工具。控件元素的识别准确,属性获取,元素操作的API丰富。可以很方便的录制测试脚本、回放和查看运行结果。 基于instrument,扩展了该框架,对其元素操作的稳定性进行了增强,统一了错误异常的处理及详细的运行日志,提供了方便的校验机制。结合具体项目,还实现了脚本的运行调度、日志的处理以及与Hudson集成的日常回归。框架图如下:

相关文档