1,简介
Monkey是一个命令行工具,您可以在任何模拟器实例或设备上运行。它发送用户事件的伪随机流进系统,它作为对正在开发的应用软件压力测试。
当Monkey程序在模拟器或设备运行的时候,如果用户出发了比如点击,触摸,手势或一些系统级别的事件的时候,它就会产生随机脉冲,所以可以用Monkey用随机重复的方法去负荷测试你开发的软件.Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。
2,准备(前提:安卓环境已经搭建完成)
首先要有被测对象:机器以及应用程序,机器可以是模拟器也可以是真机,需要获得机器的root权限
1)查看设备号
cmd中
PS:此处就遇到一个问题,如果有多个机器时怎么明确对象?
选择机器,只需要adb -s device名称命令即可针对所选机器进行操作
2)查看要测试的应用程序包名
切换到data/data路径,然后列出所有应用,标记所要跑的应用包名即可
3,基本命令格式
基本语法如下:
$ adb shell monkey [options]
如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。
$ adb shell monkey -p your.package.name -v 500
命令参数介绍
1) 参数:
参数-p用于约束限制,用此参数指定一个或多个包(Package,即App)。指定包之后,Monkey将只允许系统启动指定的APP。如果不指定包,Monkey将允许系统启动设备中的所有APP。
* 指定一个包: adb shell monkey -p com.htc.Weather
说明:com.htc.Weather为包名,100是事件计数(即让Monkey程序模拟100次随机用户事件)。
* 指定多个包:adb shell monkey -p com.htc.Weather –p com.htc.pdfreader
* 不指定包:adb shell monkey 100
说明:Monkey随机启动APP并发送100个随机事件。
2) 参数:
用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:
*日志级别 Level 0
示例 adb shell monkey -p com.htc.Weather –v 100
说明 缺省值,仅提供启动提示、测试完成和最终结果等少量信息
*日志级别 Level 1
示例 adb shell monkey -p com.htc.Weather –v -v 100
说明
*日志级别 Level 2
示例 adb shell monkey -p com.htc.Weather –v -v –v 100
说明
3)参数:
用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
* 示例:
Monkey测试1:adb shell monkey -p com.htc.Weather –s 10 100
Monkey测试2:adb shell monkey -p com.htc.Weather –s 10 100
两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序列虽
4) 参数:
用于指定用户操作(即事件)间的时延,单位是毫秒;
* 示例:adb shell monkey -p com.htc.Weather –throttle 3000 100
5) 参数:
用于指定当应用程序崩溃时(Force & Close错误),Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。
* 示例1:adb shell monkey -p com.htc.Weather –ignore-crashes 1000
* 示例2:adb shell monkey -p com.htc.Weather 1000
6) 参数:
用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。
7) 参数:
用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。
8) 参数:
用于指定当应用程序发生错误时,是否停止其运行。如果指定此参数,当应用程序发生错误时,应用程序停止运行并保持在当前状态(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)。
9) 参数:
用于指定是否监视并报告应用程序发生崩溃的本地代码。
10) 参数:
用于指定每种类别事件的数目百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比)
参数:
使用说明:
示例:
–pct-touch {+百分比}
调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)
adb shell monkey -p com.htc.Weather –pct-touch 10 1000
–pct-motion {+百分比}
调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)adb shell monkey -p com.htc.Weather –pct-motion 20 1000
–pct-trackball {+百分比}
调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)
adb shell monkey -p com.htc.Weather –pct-trackball 30 1000
–pct-nav {+百分比}
调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)
adb shell monkey -p com.htc.Weather –pct-nav 40 1000
–pct-majornav {+百分比}
调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)
adb shell monkey -p com.htc.Weather –pct-majornav 50 1000
–pct-syskeys {+百分比}
调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)
adb shell monkey -p com.htc.Weather –pct-syskeys 60 1000
–pct-appswitch {+百分比}
调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
adb shell monkey -p com.htc.Weather –pct-appswitch 70 1000
–pct-anyevent {+百分比}
调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等
adb shell monkey -p com.htc.Weather
指定多个类型事件的百分比:
adb shell monkey -p com.htc.Weather –pct-anyevent 50 –pct-appswitch 50 1000
注意:各事件类型的百分比总数要为100%
4,举例
adb -s U956 shell monkey -p xxxx –throttle 500 –pct-touch 30 –pct-motion 30 –pct-nav 0 –pct-trackball 0 –pct-majornav 20 –pct-appswitch 10 –pct-anyevent 10 -s 0227 –ignore-crashes –ignore- timeouts –ignore-security-exceptions –ignore-native-crashes –monitor-native-crashes -v -v -v 250000> d:\monkeytest.log
这是将monkey的log导入D盘,以便查看分析。
附录:
adb基本命令:
Category | Command | Description | Comments |
Options | -d | 仅仅通过USB接口来管理abd. | 如果不只是用USB接口来管理则返回错误. |
-e | 仅仅通过模拟器实例来管理adb. | 如果不是仅仅通过模拟器实例管理则返回错误. | |
-s | 通过模拟器/设备的允许的命令号码来发送命令来管理adb (比如: “emulator-5556”). | 如果没有指定号码,则会报错. | |
General | devices | 查看所有连接模拟器/设备的设施的清单. | 查看 |
help | 查看adb所支持的所有命令。. | | |
version | 查看adb的版本序列号. | | |
Debug | logcat | 将日志数据输出到屏幕上. | |
bugreport | 查看bug的报告,如dumpsys | | |
jdwp | 查看指定的设施的可用的JDWP信息. | 可以用 | |
Data | install | 安装Android为(可以模拟器/设施的数据文件.apk指定完整的路径). | |
pull | 将指定的文件从模拟器/设施的拷贝到电脑上. | | |
push | 将指定的文件从电脑上拷贝到模拟器/设备中. | | |
Ports and Networking | forward | 用本地指定的端口通过socket方法远程连接模拟器/设施 | 端口需要描述下列信息:
|
ppp | 通过USB运行ppp:
需要提醒你的不能自动启动PDP连接. | | |
Scripting | get-serialno | 查看adb实例的序列号. | 查看 |
get-state | 查看模拟器/设施的当前状态. | ||
wait-for-device | 如果设备不联机就不让执行,–也就是实例状态是 | 你可以提前把命令转载在adb的命令器中,在命令器中的命令在模拟器/设备连接之前是不会执行其它命令的. adb wait-for-device shell getprop 需要提醒的是这些命令在所有的系统启动启动起来之前是不会启动adb的 所以在所有的系统启动起来之前你也不能执行其它的命令. adb wait-for-device install .apk 上面的命令只有连接上了模拟器/设备连接上了adb服务才会被执行,而在Android系统完全启动前执行就会有错误发生. | |
Server | start-server | 选择服务是否启动adb服务进程. | |
kill-server | 终止adb服务进程. | | |
Shell | shell | 通过远程shell命令来控制模拟器/设备实例. | 查看 |
shell | 连接模拟器/设施执行shell命令,执行完毕后退出远程shell端l. |
monkey基本命令:
类别 | 选项 | 说明 |
常规 | –help | 列出简单的用法。 |
-v | 命令列的每一个 Activity的事件。 一般,一个v就足够了 | |
事件 | -s | 伪随机数产生器的 |
–throttle | 在事件之间插入固定延迟。通过这个选项可以减缓 | |
–pct-touch | 调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。 | |
–pct-motion | 调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)。 | |
–pct-trackball | 调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。 | |
–pct-nav | 调整“基本”导航事件的百分比(导航事件由来自方向输入装置的up/down/left/right组成)。 | |
–pct-majornav | 调整“主要”导航事件的百分比(这些导航事件通常引发图形接口中的动作,如:5-way键盘的中间按键、回退按键、菜单按键) | |
–pct-syskeys | 调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)。 | |
–pct-appswitch | 调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法。 | |
–pct-anyevent | 调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等。 | |
约束限制 | -p | 如果用此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。如果你的应用程序还需要访问其它包里的Activity(如选择取一个连络人),那些包也需要在此同时指定。如果不指定任何包,Monkey将允许系统启动全部包里的Activity。要指定多个包,需要使用多个 |
-c | 如果用此参数指定了一个或几个类别,Monkey将只允许系统启动被这些类别中的某个类别列出的Activity。如果不指定任何类别,Monkey将选择下列类别中列出的Activity:Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多个类别,需要使用多个-c选项,每个-c选 | |
调试 | –dbg-no-events | 设置此选项,Monkey将执行初始启动,进入到一个测试Activity,然后不会再进一步生成事件。为了得到最佳结果,把它与-v、一个或几个包约束、以及一个保持Monkey运行30秒或更长时间的非零值联合起来,从而提供一个环境,可以监视应用程序所调用的包之间的转换。 |
–hprof | 设置此选项,将在Monkey事件序列之前和之后立即生成profiling报告。这将会在data/misc中生成大檔(~5Mb),所以要小心使用它。 | |
–ignore-crashes | 通常,当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。 | |
–ignore-timeouts | 通常,当应用程序发生任何逾时错误(如“Application Not Responding”对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。 | |
–ignore-security-exceptions | 通常,当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。 | |
–kill-process-after-error | 通常,当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。注意,正常的(成功的)结束,并没有停止启动的进程,设备只是在结束事件之后,简单地保持在最后的状态。 | |
–monitor-native-crashes | 监视并报告Android系统中本地代码的崩溃事件。如果设置了–kill-process-after-error,系统将停止运行。 | |
–wait-dbg | 停止执行中的Monkey,直到有调试器和它相连接。 |
logcat基本命令:
Option | Description |
-b | 加载一个可使用的日志缓冲区供查看,比如event |
-c | 清楚屏幕上的日志. |
-d | 输出日志到屏幕上. |
-f | 指定输出日志信息的 |
-g | 输出指定的日志缓冲区,输出后退出. |
-n | 设置日志的最大数目 |
-r | 每 |
-s | 设置默认的过滤级别为silent. |
-v | 设置日志输入格式,默认的是brief |
优先级有下列集中,是按照从低到高顺利排列的:
- V
— Verbose (lowest priority) - D
— Debug - I
— Info - W
— Warning - E
— Error - F
— Fatal - S
— Silent (highest priority, on which nothing is ever printed)
</div>