小顽童(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 |
停止小顽童直到调试工具连接上程序。 |