小顽童(Monkey)是运行在你的模拟器或者设备上一个程序,它能产生伪随机事件,如用户点击,触摸,用户手势(译者:gestures指用户的连续动作导致屏幕的动态显示,Android上可以使用手指“拉动”屏幕的效果就是gesture),以及一系列的系统级事件。你可以使用小顽童对你的程序进行压力测试,它可随机产生一些重复的东西。
小顽童是一个命令行程序,你可以跑在模拟器或者设备上。它发送随机的用户和系统事件,可以对你开发的应用程序进行压力测试。
小顽童包含一系列的选项,但可以分解为4个主要的类别:
· 基本设置选项,例如设置一些事件。
· 操作限制,如限制测试某一个单独的包。
· 事件类型以及频率。
· 调试选项。
当小顽童运行时,它产生的事件被发送给系统。它会监视正在测试系统并寻找三种情况做特殊处理:
· 如果你限制小顽童在一个或者多个包里运行,如果发现程序试图使用其它包,就对其进行阻塞。
· 如果你的程序崩溃或者收到任何没有无法处理的异常,小顽童就会停止并且报告错误。
· 如果你的程序产生一个程序没有答复的错误,小顽童会停止并报告错误。
根据选项的冗长程度,你可以看到小顽童运行时候产生的报告,这个时候事件已经开始产生。
你可以通过命令或者脚本启动小顽童。因为小顽童运行在模拟器/设备里。你需要在这些环境的shell里启动它,使用时,在每个命令前加上adb shell。
基本语法:
$ adb shell monkey [options] <event-count>
没有选项指定时,小顽童安静(没有其它复杂内容)模式启动,然后发送事件给所有安装在你目标扳上的包里。这里有一个有代表性的命令,它能启动你的程序并发送500个随见的事件给程序。
$ adb shell monkey -p your.package.name -v 500
下面的表格里列出了所有包含在小顽童命令行的参数:
| 类别 | 选项 | 描述 | 
| 通用 | --help | 打印使用向导。 | 
| -v | 每个-v在命令里都会增加复杂级别,0级别(默认)在启动、测试结束、最终结果之外只提供很少的信息,1级别在运行时提供更详细的测试信息,例如每个发往你活动的事件。 2级别提供更加详细的设置信息,如一个活动是否选中被测试。 | |
| 事件 | -s <seed> | 随机数字产生器的种子。如果你用同样的种子运行小顽童,它将会产生相同的事件。 | 
| --throttle <milliseconds> | 在事件中插入一个固定的延迟。一般使用这个命令去延缓小顽童程序。如果没有指定,小顽童产生的事件将没有延迟并尽可能快的发送。 | |
| --pct-touch <percent> | 调整触摸事件的比例。(触摸事件是一个在屏幕上单点按下的事件) | |
| --pct-motion <percent> | 调整手势事件的比例。(手势事件由一系列屏幕上的按下事件组成,一系列的伪随机移动和一个松开事件) | |
| --pct-trackball <percent> | 调整跟踪球事件(跟踪球由一个或多个随机移动事件组成,有时还会接一个单击事件) | |
| --pct-nav <percent> | 调整”基本”导航事件。(导航事件由上/下/左/右组成,这些事件由输入设备输入) | |
| --pct-majornav <percent> | 调整“主要”的导航事件的比例。(有些导航事件将会在你的UI里导致一些动作,例如在5向键里的中间,退出键,或者菜单键) | |
| --pct-syskeys <percent> | 调整“系统”事件的比例。(有些键通常是系统保留的,如 主界面, 退出,电话,结束通话,或者声音调节 ) | |
| --pct-appswitch <percent> | 调整活动被运行的比例。 在一些随机的间隔里,小顽童会调用一个startActivity()的调用,以最大程序得覆盖你包里的所有的活动。 | |
| --pct-anyevent <percent> | 调整其他类型事件的比例。 这包含所有其他的事件,如用户按键,其他设备上不常用的的按键,等等。 | |
| 限制 | -p <allowed-package-name> | 如果你指定一个或者多个包,小顽童程序仅仅允许系统访问这些包里的活动。如果你的应用程序需要进入其他包的活动(例如选择一个联系人),你也需要指定这个包。如果你不指定任何包,小顽童将允许系统运行所有包里活动。 指定多个包,可以多次使用-p选项 —— 一个—每个p选项选一个包。 | 
| -c <main-category> | 如果你指定一个或多个类别(category),小顽童将仅仅允许系统访问这些指定类别里的一个活动。如果你不指定任何类别,小顽童将选择Intel.CATEGORY _LAUNCHER 或者 CATEGORY_MONKEY列出的活动。如果要选择多个类别,多次使用-c选项 —— 每个-c选一个类别。 | |
| 调试 | --dbg-no-events | 当被指定时,小顽童将在测试活动里执行初始化运行程序,但还没有产生任何事件。 最好的是集成-v, 能使一个或多个包被限制,这样一个非0的控制能保证小顽童程序运行30秒或更长时间。这提供一个环境,你可以监视你的应用程序调用的包的所有变化。 | 
| --hprof | 如果设置这个选项,系统会在小顽童事件序列前后都立即产生程序分析报告。这将会产生巨大的(~5M)数据文件,所以请谨慎使用。 查看Traceview可以得到更多的信息。 | |
| --ignore-crashes | 通常情况下,小顽童会因为程序崩溃或者遇到一些无法处理的异常而停止,但你指定了这个选项,小顽童会继续发事件给系统,直到事件计数器结束。 | |
| --ignore-timeouts | 通常情况下,小顽童会因为程序超时而停止,例如程序弹出“应用程序没有答复”的对话框。如果你指定了这个选项,小顽童会继续发事件给系统,直到事件计数器结束。 | |
| --ignore-security-exceptions | 通常情况下,小顽童会因为一些权限错误而停止,例如,它试图运行一个需要特殊权限的活动。 如果指定这个选项,小顽童会继续发送事件给系统,直到事件计数器结束。 | |
| --kill-process-after-error | 通常情况下,小顽童会因为错误停止,应用程序失败但会并停留在运行状态,当这个条件设置后,它会发消息给系统在错误发生的地方停止进程。 评注:在程序正常(成功)的完成,运行的程序不会停止,设备会收到结束事件而停留在最后的状态上。 | |
| --monitor-native-crashes | 监视并报告Android系统代码里的崩溃事件。如果设置了--kill-process-after-error, 系统将会停止。 | |
| --wait-dbg | 停止小顽童直到调试工具连接上程序。 |