Monkey是一个在仿真器或设备上运行的程序,并生成用户事件(如点击,触摸或手势)以及一些系统级事件的伪随机流。 您可以使用Monkey以随机但可重复的方式对您正在开发的应用程序进行压力测试。
Monkey测试介绍
Monkey是一个命令行工具,您可以在任何模拟器实例或设备上运行。它发送用户事件的伪随机流到系统中,对您正在开发的应用软件进行压力测试。
Monkey包括许多选项,但它们分为四个主要类别:
- 基本配置选项,如设置要尝试的事件数。
- 操作约束,例如将测试限制为单个包。
- 事件类型和频率。
- 调试选项。
当Monkey运行时,它会生成事件并将它们发送到系统。 它还监视被测系统,并特别处理三种条件:
- 如果你限制Monkey在一个或多个特定包中运行,它会监视并禁止导航到任何其他包。
- 如果您的应用程序崩溃或收到任何未处理的异常,Monkey将停止并报告错误。
- 如果您的应用程序生成应用程序无响应错误,Monkey将停止并报告错误。
根据您选择的详细程度级别,您还将看到有关Monkey进度和生成事件的报告。
Monkey的基本使用
您可以使用命令行或脚本在开发机器上启动Monkey。 因为Monkey必须在模拟器/设备环境中运行,所以必须从该环境中的shell启动它。 您可以通过将 adb shell
作为每个命令的前缀,或者直接输入shell
并输入Monkey命令来完成。
基本语法是:
$ adb shell monkey [options] <event-count>
如果没有指定选项,Monkey将以安静(非详细)模式启动,并将事件发送到目标上安装的任何(和所有)包。 下面是一个更典型的命令行,它将启动您的应用程序并向其发送500个伪随机事件:
$ adb shell monkey -p your.package.name -v 500
命令选项参考
下表列出了您可以在Monkey命令行中包含的所有选项。
类别 | 选项 | 描述 |
---|---|---|
普通 | --help | 打印简单的使用指南。 |
-v | 命令行上的每个-v将增加反馈信息级别(日志的详细程序)。</br>级别0 示例 adb shellmonkey -p com.htc.Weather –v 100 </br>(默认值)仅提供了启动信息,测试完成和最终结果等少量信息。</br>级别1 示例 adb shellmonkey -p com.htc.Weather –v -v 100 </br>提供较为详细的日志,包括每个发送到Activity的事件信息。</br>级别2 示例 adb shellmonkey -p com.htc.Weather –v -v –v 100 </br>最详细的日志,包括了测试中选中/未选中的Activity信息。 |
|
事件 | -s <seed> | 伪随机数生成器的种子值。 如果你用相同的种子值重新运行Monkey,它将生成相同的事件序列。 |
--throttle <milliseconds> |
adb shell monkey -p com.htc.Weather --throttle 3000 100 在事件之间插入固定延迟。 你可以使用这个选项来减慢Monkey。 如果未指定,则不存在延迟,并且尽可能快地生成事件。 |
|
--pct-touch <percent> |
adb shell monkey -p com.htc.Weather --pct-touch 10 1000 调整触摸事件的百分比。 (触摸事件是屏幕上单个位置的 down-up事件。) |
|
--pct-motion <percent> |
com.htc.Weather --pct-motion 20 1000 调整运动事件的百分比。 (运动事件包括屏幕上某处的down事件,一系列伪随机运动和up事件。) |
|
--pct-trackball <percent> |
adb shell monkey -p com.htc.Weather --pct-trackball 30 1000 调整轨迹球事件的百分比。 (跟踪球事件由一个或多个随机移动组成,有时后跟一次点击。) |
|
--pct-nav <percent> |
adb shell monkey -p com.htc.Weather --pct-nav 40 1000 调整“基本”导航事件的百分比。 (导航事件由来自方向输入设备的up/down/left/right组成)。 |
|
--pct-majornav <percent> |
adb shell monkey -p com.htc.Weather --pct-majornav 50 1000 调整“主要”导航事件的百分比。 (这些是通常会在您的UI中执行操作的导航事件,例如5向键盘中的中心按钮,后退键或菜单键)。 |
|
--pct-syskeys <percent> |
adb shell monkey -p com.htc.Weather --pct-syskeys 60 1000 调整“系统”键事件的百分比。 (这些是通常保留供系统使用的键,例如Home,Back,Start Call,End Call或音量控制。) |
|
--pct-appswitch <percent> |
adb shell monkey -p com.htc.Weather--pct-appswitch 70 1000 调整活动的百分比。 在随机的时间间隔,Monkey将发出一个startActivity() 调用,作为最大限度地覆盖你的包中所有Activity的一种方法。 |
|
--pct-anyevent <percent> |
adb shell monkey -p com.htc.Weather --pct -anyevent 100 1000 调整其他类型事件的百分比。 这是所有其他类型的事件的全部,例如按键,设备上的其他较少使用的按钮等等。 |
|
约束 | -p <allowed-package-name> |
adb shell monkey -p com.htc.Weather –p com.htc.pdfreader -p com.htc.photo.widgets 100 如果以这种方式指定一个或多个软件包,Monkey将只允许系统访问这些软件包中的活动。 如果您的应用程序需要访问其他包中的活动(例如选择联系人),您还需要指定这些包。 如果不指定任何软件包,Monkey将允许系统在所有软件包中启动活动。 要指定多个包,请多次使用-p选项 - 每个包一个-p选项。 |
-c <main-category> | 如果您以这种方式指定一个或多个类别,Monkey将只允许系统访问使用指定类别之一列出的活动。 如果不指定任何类别,则Monkey将选择使用类别Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY列出的活动。 要指定多个类别,请多次使用-c选项 - 每个类别一个-c选项。 | |
调试 | --dbg-no-events | 当指定时,Monkey将执行初始启动进入测试活动,但不会生成任何进一步的事件。 为了获得最佳效果,请结合-v,一个或多个程序包约束和非零事件延时,保持Monkey运行30秒或更长时间。 这提供了一个环境,您可以在其中监视应用程序调用的软件包转换。 |
--hprof | 如果设置,此选项将立即在Monkey事件序列之前和之后生成性能分析报告。 这将在data/misc下产生大(〜5Mb)文件,因此请小心使用。 有关跟踪文件的更多信息,请参阅Traceview。 | |
--ignore-crashes | 通常,当应用程序崩溃或遇到任何类型的未处理的异常时,Monkey将停止。 如果指定此选项,则Monkey将继续向系统发送事件,直到计数完成。 | |
--ignore-timeouts | 通常,当应用程序遇到任何类型的超时错误(如“应用程序无响应”对话框)时,Monkey将停止。 如果指定此选项,则Monkey将继续向系统发送事件,直到计数完成。 | |
--ignore-security-exceptions | 通常,当应用程序遇到任何类型的权限错误时,Monkey将停止,例如,如果它尝试启动需要某些权限的活动。 如果指定此选项,则Monkey将继续向系统发送事件,直到计数完成。 | |
--kill-process-after-error | 通常,当Monkey由于错误而停止时,失败的应用程序将保持运行。 设置此选项时,它将通知系统停止发生错误的进程。 注意,在正常(成功)完成下,启动的进程不停止,并且设备在最后事件之后简单地保持在最后状态。 | |
--monitor-native-crashes | Android系统原生代码中的监视和报告崩溃。 如果设置了-kill-process-after-error,系统将停止。 | |
--wait-dbg | 停止Monkey执行,直到调试器连接到它。 |
注:
日志保存时可直接通过一下命令
adb shell -p com.htc.Weather -v -v -v 10000 > monkey.txt
如需保存logcat日志,可以新开个dos窗口执行
adb shell logcat > logcat.txt