Monkey是一个运行在模拟器里或实际设备的Android工具。它向系统发送伪随机的用户事件流,例如按键、触摸屏,手势,以及其他系统级别的事件。使用Monkey能够以一种随机的但是可重复的方式对正在开发的应用程序进行压力测试。

Monkey有许多选项,它们大致分为四类:

· 基本配置选项,例如设置尝试的事件数量。

· 运行约束选项,例如设置只对单独的一个包进行测试。

· 事件类型和频率。

· 调试选项。

Monkey运行时会生成事件,并把它们发送给系统。同时Monkey还对系统进行监测,对以下三种情况进行特殊处理:

· 如果限定了Monkey运行在一个或几个特定的包上,那么当Monkey监测到会跳转到其他包的操作时,会阻止这种操作。

· 如果应用程序崩溃或收到任何未处理的异常,Monkey将停止并报错。

· 如果应用程序产生了应用程序不响应(ANR)的错误,Monkey将停止并报错。

按照设定的不同,在Monkey中可以看到执行过程的报告以及Monkey产生的事件。

Monkey可以通过电脑中的命令行或脚本来启动。由于Monkey运行在模拟器或者设备中,因此必须用它们的shell环境来启动。你可以通过在每条命令的前面加上adb shell或者先进入设备的shell环境后再直接输入Monkey命令。Monkey命令的基本语法如下:

$ adb shell monkey [options]

如果不指定options,Monkey将以安静模式启动,并把事件任意发送到安装在目标设备中的所有包。下面是一个更典型的命令行例子,它启动指定的应用程序,并向其发送500个伪随机事件:

$ adb shell monkey -p your.package.name -v500

下面是Monkey的所有选项的说明:

类别

选项

说明

普通

--help

打印用法说明。

-v

命令行的每一个-v将增加反馈信息的级别。Level 0(缺省值) 只提供较少信息,包括启动信息,测试完成和最终结果。Level 1提供比较详细的测试信息,例如发送到Activity的事件。Level 2提供更加详细的设置信息,例如Activity是否被测试选中。

事件

-s

伪随机数生成器的种子值。如果用相同的种子值再次运行Monkey,它将生成相同的事件流。

--throttle

在事件之间插入固定延迟。通过这个选项可以延迟Monkey的执行速度。如果不指定该选项,事件之间将不会有延迟,事件将尽可能快的被发送出去。

--pct-touch

调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。

--pct-motion

调整滑动事件的百分比(滑动事件由屏幕上某处的一个down事件,一系列的伪随机的移动事件和一个up事件组成)。

--pct-trackball

调整轨迹球事件的百分比(轨迹球事件由一个或几个随机的移动事件组成,有时还伴随有点击)。

--pct-nav

调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right事件组成)。

--pct-majornav

调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,例如五方向键的中间按键,回退键和菜单键)

--pct-syskeys

调整“系统”按键事件的百分比(系统按键通常被保留,由系统使用,如Home键、Back键、拨号键、挂断电话键及音量控制键)。

--pct-appswitch

调整启动Activity的百分比。在随机的时间间隔中,Monkey将执行一次startActivity调用,作为一种最大程度覆盖包中所有Activity的方法。

--pct-anyevent

调整其它类型事件的百分比。它包括所有其它类型的事件,例如键盘事件,其它不常用的设备按键等。

约束

-p

如果通过此参数指定了一个或几个包,Monkey将只允许系统启动这些包里的Activity。如果应用程序还需要访问其它包里的Activity(例如选择一个联系人),那么必需同时指定这些包。如果不指定任何包,Monkey将允许系统启动所有包里的Activity。每个-p选项只能指定一个包,要指定多少个包就需要使用多少个-p选项,。

-c

如果通过此参数指定了一个或几个类别(categories),Monkey将只允许系统启动属于这些类别中的某个类别的Activity。如果不指定任何类别,Monkey将选择下列类别中列出的Activity:Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。同样,每个-c选项只能用于指定一个类别。

调试

--dbg-no-events

如果设置此项,Monkey将执行初始启动来进入到一个测试Activity,但是不会再生成更多的事件。为了得到最佳结果,把它和-v(一个或几个包约束)以及一个非0的事件间隔时间值组合起来保持Monkey运行30秒或更长时间的。从而提供一个环境来监测应用程序中所调用的包之间的转换。

--hprof

如果设置此项,将会在Monkey事件序列之前和之后生成profiling报告。报告比较大(大约5Mb),存放在data/misc中,要小心使用它。

--ignore-crashes

通常,当应用程序崩溃或者捕获任何未处理的异常时,Monkey将停止运行。如果设置此项,Monkey将继续向系统发送事件,直到完成所有事件。

--ignore-timeouts

通常,当应用程序发生任何超时错误(例如ANR)时,Monkey将停止运行。如果设置此项,Monkey将继续向系统发送事件,直到完成所有事件。

--ignore-security-exceptions

通常,当应用程序发生许可错误(例如启动一个需要某些许可的Activity)时,Monkey将停止运行。如果设置此项,Monkey将继续向系统发送事件,直到完成所有事件。

--kill-process-after-error

正常情况下,当Monkey由于检测到错误而停止运行时,出错的应用程序将继续保持运行状态。如果设置此项,Monkey将会通知系统杀死发生错误的进程。注意,如果是正常的(成功的)结束测试,已经启动的进程并不会停止,设备只是在结束测试之后简单的保持在最后的状态。

--monitor-native-crashes

监视并报告Android系统中native层代码的崩溃事件。如果设置了--kill-process-after-error选项,系统将停止运行。

--wait-dbg

暂停Monkey的执行,直到有调试器和它连接上。