UI/Application Exerciser Monkey (UI/应用程序压力测试工具 Monkey)

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 执行。