Monkey是一个程序,它运行在模拟器或设备上,生成伪随机的用户事件流,如点击、触摸、手势以及一些系统级的事件,使用它可以给程序用随机、可重复的操作进行压力测试。
Monkey是一个命令行工具,可以运行在任何模拟器和设备上。
Monkey包含一些选项,大致可以划分为以下四种:
***基本的配置选项,如设置事件的个数。
***操作约束,如将测试限制为只针对单个包。
***时间类型和频率
***调试选项
Monkey生成事件并将它们发送到系统。它会监视系统,如果有以下三种情况,会有特定的处理:
***如果将Monkey限制为只在某个或者多个特定的包中运行,那么Monkey会监视那些将要发送给别的包的事件,并阻止这些事件的传递。
***如果应用崩溃了、或者是有没有处理的异常(unhandled exception),Monkey会停止运行,并报告这些错误。
***如果应用发生应用程序无响应(application not responding)的错误,Monkey会停止运行,并报告这些错误。
可以使用命令行或者脚本来启动Monkey。Monkey 运行在模拟器或设备上,所以要在shell环境下来启动。可以在每个Monkey命令前加上adb shell;也可以先用命令adb shell 进入shell 环境,再直接用Monkey 命令。
基本的语法:
$ adbshell monkey [options] <event-count>
不加任何选项的话,Monkey会以静默模式启动,并向设备上的所有应用发送事件。下面这行命令会启动你的应用,给应用发送500个伪随机事件。
$ adbshell monkey -p your.package.name -v 500
类型 | 选项 | 描述 |
| --help |
|
-v | 用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别:Level 0(默认)提供启动提示、测试完成、最终结果等少量提示;Level 1提供了较多的信息,包括每个发送给Activity的事件信息;Level 2 提供了最多的信息,包括测试中选中/未选中Activity信息。 | |
事件 | -s <seed> | 用于指定伪随机数生成的seed值,如果两次使用的seed值相同,则Monkey产生的事件序列也相同。 |
--throttle <milliseconds> | 指定事件之间的延时,可以通过该选项来降低Monkey发送事件的速度。不设置的话就没有延时。 | |
--ptc-touch <percent> | 指定触摸事件的百分比(触摸事件是一个down-up事件,发生在屏幕的某一位置) | |
--ptc-motion <percent> | 指定动作事件的百分比(动作事件由屏幕上某一位置的down事件、一系列的伪随机move事件以及一个up事件组成) | |
--ptc-trackball <percent> | 指定轨迹事件的百分比(轨迹事件由一个或多个move事件组成,有时还伴有点击事件) | |
--ptc-nav <percent> | 基本的导航事件(导航事件由来自方向输入设备的up/down/left/right组成) | |
--ptc-majornav <percent> | 主要的导航事件(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键) | |
--ptc-syskey <percent> | 系统按键(Home, Back, Start Call, End Call, or Volume controls) | |
--ptc-appswitch <percent> | Activity 启动(在随机间隔,调用stactActivity,以最大的限度覆盖包中的所有Activity) | |
约束 | -p <allowed-package-name> | 该选项可以指定一个或多个包,Monkey只允许系统访问这些包中Activity。如果需要访问其他包中的Activity(如选择联系人),需要再用该选项指定其他包。如果一个包都没有指定,Monkey允许系统启动所有包中的Activity。要指定多个包需要多次使用-p选项,一个-p选项指定一个包。 |
-c <main-category> | 用指定的类别来限制Activity是否被Monkey启动。如果没有使用该选项,Monkey会选择有Intent_CATEGORY_LAUNCHER或Intent_CATEGORY_MONKEY类别的Activity | |
调试 | --dbg-no-events | 设置此选项,Monkey会执行初始启动,进入到一个测试 Activity,但是不会再进一步生成事件。为了得到最佳结果,把它与-v、一个或几个包约束、以及一个使Monkey能运 行30 秒或更长时间的throttle值结合起来,从而提供一个环境,可以监视应用所调用的包之间的切换。 |
| --hprof | 设置此选项,将在Monkey事件序列之前和之后立即生成 profiling报告。 这将会在data/misc 中生成大文件(~5Mb),所以要小心使用它。 |
| --ignores-crashes | 通常,Monkey会在应用崩溃或出现没有处理的异常时停止运行。如果设置此选项,Monkey不会停止运行,而是继续向系统发送没有发送完的事件。 |
| --ignores-timeouts | 通常,Monkey会在应用发生超时错误如”应用程序无响应”时停止运行。如果设置此选项,Monkey的处理同上。 |
| --ignores-security-exceptions | 权限错误(permissions) |
| --kill-process-after-error | 通常,Monkey会在发生错误之后停止运行,出错的应用将会继续运行。设置此选项之后,它会通知系统停止出错的进程。注意,正常的(成功的)结束并没有停止启动的进程,设备只是在结束事件之后简单的保持在最后的状态。 |
| --monitor-native-crashes | 监视native代码发生的错误。如果设置了--kill-process-after-error,则系统会停止运行 |
| --wait-dbg | 停止执行中的Monkey,直到有调试器和它连接上 |