2012-04-01 10:16 38185人阅读 评论(10) 收藏 举报
 分类:
android(3) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

有时候我们需要对一个软件进行压力测试,检查该软件的性能。如果是人工进行测试的话,效率会低很多,而且会比较枯燥。这时,Android中的一个命令行工具Monkey就可以为我们减轻很多重复而又繁琐的工作。

一、Monkey简介

至于Monkey的名字是有何而来的呢?这个没有去怎么考究,Monkey这个工具就是一个调皮的猴子,在App中乱按、乱摸、乱滚、乱跳。Monkey测试是Android平台下自动化测试的一种快速有效的手段,通过Monkey工具可以模拟用户触摸屏幕、滑动轨迹球、按键等操作来对模拟器或者手机设备上的软件进行压力测试,检测该软件的稳定性、健壮性。它的原理是向系统发送伪随机的用户事件流(如按键输入、触摸输入、手势输入等),实现对正在开发的应用程序进行压力测试。

二、Monkey的特性

(1)测试的对象仅为应用程序包(apk包),有一定的局限性;

(2)Monkey测试使用的事件流数据流是随机的,不能进行自定义;

(3)可对MonkeyTest的对象、事件数量、类型、频率等进行设置。

虽然Monkey工具并不完善,但是足于应付应用程序的基本测试需要了。如果需要功能更强大的测试工具的话,可以使用Monkey的进化版MonkeyRunner。如果把Monkey看作是幼儿园的小孩,那么它的进化版MonkeyRunner就可以看作是一个初中生了。它支持自定义插件,控制事件,随时截图,简而言之,任何你在模拟器/设备中能干的事情,MonkeyRunner都能干,而且还可以记录和回放。在这里,就不详细介绍MonkeyRunner了,具体可以参考其官方文档或者其他相关资料。

注:MonkeyRunner官方文档的网址

http://developer.android.com/guide/developing/tools/monkeyrunner_concepts.html

三、Monkey的基本用法

基本语法如下:

$ adb shell monkey [options]

如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送1000个伪随机事件:

$ adb shell monkey -p your.package.name -v number

$ monkey -p(package的意思)  指定文件名 -v(测试的次数和频率) number(次数)

四、Monkey测试示例图解

通过简单的测试示例,初步了解并掌握Monkey测试的步骤。注意,这里主要是使用adb命令进行安装和相关操作。测试的具体参考步骤如下:

(1)首先,先准备了一个测试用的应用程序(apk文件)。为了测试,这里选择了一个格瓦拉手机购票App进行测试。下载地址为:http://www.gewara.com/mobile/mobileMovie.xhtml

下载好后,得到下图所示的apk文件。

(2)将apk文件复制到android sdk对应platform-tools的目录下。例如,笔者的sdk路径为 D:\android\android-sdk-windows\platform-tools。如图所示

(3)进行apk文件的安装(安装的前提是,已经启动并可以检测模拟器):有安装91助手或者豌豆的用户可以直接双击apk文件进行安装;也可以使用android下的adb命令进行安装(如下图所示,Success表示安装成功)。adb命令下安装apk文件的命令为:adb install 文件名.apk。

(4)安装好后,会在模拟器上看到应用程序的启动图标

(5)安装好apk文件后,需要知道应用程序主Activity(第一个启动的Activity)所在的包名。这时,我们可以使用adb shell命令查找到程序主Activity所在的包名,如下图所示。(知道了apk的包名,我们也可以利用adb命令进行应用程序的卸载;卸载apk文件的命令为:adb uninstall 包名)

(6)这里是最关键的一步,使用moneky命令进行自动化压力测试。

命令为:#monkey -p com.gewara -v 1000(参数说明:-p后跟着软件所在包名,-v后跟测试的次数)。这里对该软件进行1000次的自动化测试,几分钟内即可以完成测试。如图所示

(7)测试完毕,发现程序出错了。程序出错,表明该软件的稳定性和健壮性还有待提高。

这时,可以打开Lotcat查看出错信息。如图所示

五、Monkey测试的停止条件

(1)如果先顶了Monkey运行在一个或几个特定的包上,那么它会检测试图转到它包的操作,并对其进行阻止;

(2)如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错;

(3)如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。

通过多次并且不同设定下的Monkey测试才算它是一个稳定性和健壮性足够的程序。

六、Monkey命令参数说明

随着测试的深入,我们需要忽略App的崩溃(App的崩溃会导致Monkey测试的停止),而不是停住,monkey同样能做到。--ignore crashes

甚至,它还能生成profiling报告。 --hprof

注:Monkey具体参数的设定可参考:

http://developer.android.com/guide/developing/tools/monkey.html

通过参数的设置,可以完成更多的调试功能,Monkey命令行参数中文相关说明见下表。

Android自动化压力测试图解教程——Monkey工具的更多相关文章

  1. Android自动化压力测试图解教程——Monkey工具 (转)

    有时候我们需要对一个软件进行压力测试,检查该软件的性能.如果是人工进行测试的话,效率会低很多,而且会比较枯燥.这时,Android中的一个命令行工具Monkey就可以为我们减轻很多重复而又繁琐的工作. ...

  2. Android APP压力测试(一)之Monkey工具介绍

    Android APP压力测试(一) 之Monkey工具介绍 前言 本文主要介绍Monkey工具.Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕.滑动. ...

  3. Android APP压力测试(三)之Monkey日志自动分析脚本

    Android APP压力测试(三) 之Monkey日志自动分析脚本 前言 上次说要分享Monkey日志的分析脚本,这次贴出来分享一下,废话不多说,请看正文. [目录] 1.Monkey日志分析脚本 ...

  4. Android APP压力测试(二)之Monkey信息自动收集脚本

      Android APP压力测试(二) 之Monkey信息自动收集脚本 前言: 上一篇Monkey介绍基本搬抄官方介绍,主要是为了自己查阅方便.本文重点介绍我在进行Monkey时如何自动收集相关信息 ...

  5. Android自动化压力测试快速入门教程(图解)——MonkeyRunner

    一.MonkeyRunner测试环境配置(转自) 1.  android-sdk 下载地址:http://www.android-doc.com/sdk/index.html 下载完成后,只需要解压就 ...

  6. android 自动化压力测试-monkey 1 实践

    Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试.Monkey ...

  7. android 自动化压力测试-monkey 2 获取程序包名

    monkey 1 中我们写到: C:\Users\chenshan>adb shell shell@hwG750-T20:/ $ monkey -p cn.emoney.acg -v 500 说 ...

  8. android 自动化压力测试-monkey 3 命令参数

    使用monkey help 命令查看命令参数,如下: C:\Users\chenfenping>adb shell monkey -help usage: monkey [-p ALLOWED_ ...

  9. Android压力测试快速入门教程(图解)——Monkey工具

    文章目录: 一.Monkey简介 二.Monkey的基本用法 三.Monkey测试示例图解 四.Monkey命令参数介绍 五.Monkey log分析 一.Monkey简介 Monkey:Androi ...

随机推荐

  1. 提示“正尝试安装的adobe flash player不是最新版本”的解决方法

    尼玛,今天下午遇到一个比较奇怪的现象,我电脑的flash的不能正常使用了,我下载了一个重新安装了下,但还是不行.然后我又卸载了,重新安装flash,重启电脑,还是不行...而且在安装flash pla ...

  2. Java 网络编程----基本概念

    网络现在是一个非常普遍的概念. 以下是维基百科上的解释: 网络一词有多种意义,可解作: 网络流也简称为网络(network).一般用于管道系统.交通系统.通讯系统建模. 有时特指计算机网络. 或特指其 ...

  3. du df 查看文件和文件夹大小

    http://www.cnblogs.com/benio/archive/2010/10/13/1849946.html du -h df -h du -h --max-depth=1 //  查看当 ...

  4. MTOM以及在WCF中的应用

    关于MTOM的基本概念 提到MTOM消息优化传输机制,通常的实验结果是使用MTOM传输数据会提高大约33%的性能. 消息传输优化机制 (MTOM) 标准允许将消息中包含的大型数据元素外部化,并将其作为 ...

  5. Spring 通过XML配置文件以及通过注解形式来AOP 来实现前置,环绕,异常通知,返回后通知,后通知

    本节主要内容: 一.Spring 通过XML配置文件形式来AOP 来实现前置,环绕,异常通知     1. Spring AOP  前置通知 XML配置使用案例     2. Spring AOP   ...

  6. Windows x86/ x64 Ring3层注入Dll总结

    欢迎转载,转载请注明出处:http://www.cnblogs.com/uAreKongqi/p/6012353.html 0x00.前言 提到Dll的注入,立马能够想到的方法就有很多,比如利用远程线 ...

  7. hdu 2196 Computer(树形DP)

    Computer Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  8. mysql启动不成功显示The server quit without updating PID file的解决方法

    上午在编译安装mysql的时候 就出现标题中的错误,经实践在第二步操作后启动成功,参考链接 链接http://linuxadministrator.pro/blog/?p=225 You may fa ...

  9. SSIS WITH VERTICA的注意事项总结

    项目中使用到SSIS访问vertica,以下是我使用中总结的一些注意事项: 1.vertica对约束的处理方式与之前的DBMS是不同的. 以上的截图说明,在使用ado.net provider连接ve ...

  10. java截取日期范围并计算相差月数

    前两天,媳妇单位让整理excel的某一个单元格内两个日期范围的相差月数,本人对excel操作不是很熟练,便写了个小程序计算了一下,原始需求如下: 计算投资期限的范围,并得到期限范围的相差月数 思路1: ...