Monkey 是一个在您的模拟器或设备上运行的程序,它会生成伪随机的用户事件流,例如点击、触摸或手势,以及一系列系统级事件。您可以使用 Monkey 以随机但可重复的方式对正在开发的应用程序进行压力测试。
概览
Monkey 是一个可以在任何模拟器实例或设备上运行的命令行工具。它向系统发送伪随机用户事件流,作为对您正在开发的应用程序软件的压力测试。
Monkey 包含许多选项,它们主要分为四大类:
- 基本配置选项,例如设置要尝试的事件数量。
- 操作约束,例如将测试限制为单个包。
- 事件类型和频率。
- 调试选项。
当 Monkey 运行时,它会生成事件并将其发送到系统。它还会监控受测系统,并留意三种特殊情况:
- 如果您已将 Monkey 限制在运行一个或多个特定包中,它会监控尝试导航到任何其他包的行为,并阻止这些行为。
- 如果您的应用程序崩溃或收到任何类型的未处理异常,Monkey 将停止并报告错误。
- 如果您的应用程序生成了应用程序无响应 (ANR) 错误,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:命令行中的每个 -v 都会增加详细级别。级别 0(默认值)除了启动通知、测试完成和最终结果外,几乎不提供其他信息。级别 1 提供测试运行时的更多详细信息,例如发送到您活动的单个事件。级别 2 提供更详细的设置信息,例如选择或未选择进行测试的活动。 | |
| 事件 | -s <seed> |
伪随机数生成器的种子值。如果您使用相同的种子值重新运行 Monkey,它将生成相同的事件序列。 |
--throttle <milliseconds> |
在事件之间插入固定延迟。您可以使用此选项来减慢 Monkey 的速度。如果未指定,则没有延迟,事件将尽可能快地生成。 | |
--pct-touch <percent> |
调整触摸事件的百分比。(触摸事件是屏幕上单个位置的按下-抬起事件。) | |
--pct-motion <percent> |
调整动作事件的百分比。(动作事件包括屏幕上某处的按下事件、一系列伪随机移动和一个抬起事件。) | |
--pct-trackball <percent> |
调整轨迹球事件的百分比。(轨迹球事件包括一个或多个随机移动,有时后面跟着点击。) | |
--pct-nav <percent> |
调整“基本”导航事件的百分比。(导航事件包括来自方向输入设备的向上/向下/向左/向右输入。) | |
--pct-majornav <percent> |
调整“主要”导航事件的百分比。(这些导航事件通常会在您的 UI 中引发操作,例如 5 向键中的中心按钮、返回键或菜单键。) | |
--pct-syskeys <percent> |
调整“系统”按键事件的百分比。(这些是通常由系统保留使用的键,例如主页、返回、拨号、挂断或音量控制。) | |
--pct-appswitch <percent> |
调整活动启动的百分比。Monkey 将以随机间隔发出 startActivity() 调用,以此作为最大限度覆盖包中所有活动的一种方式。 | |
--pct-anyevent <percent> |
调整其他类型事件的百分比。这是对所有其他类型事件的汇总,例如按键、设备上其他不常用的按钮等。 | |
| 约束 | -p <allowed-package-name> |
如果您通过这种方式指定一个或多个包,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),因此请谨慎使用。有关分析性能报告的信息,请参阅配置您的应用性能。 | |
--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 之前,停止 Monkey 执行。 |