UI/应用演练器 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 都会增加详细程度。级别 0(默认值)除了启动通知、测试完成和最终结果外,几乎不提供任何信息。级别 1 提供更多关于测试运行时的详细信息,例如发送到您活动的各个事件。级别 2 提供更详细的设置信息,例如选择或未选择用于测试的活动。
事件 -s <种子> 伪随机数生成器的种子值。如果您使用相同的种子值重新运行 Monkey,它将生成相同的事件序列。
--throttle <毫秒> 在事件之间插入固定延迟。您可以使用此选项减慢 Monkey 的速度。如果未指定,则没有延迟,事件会尽可能快地生成。
--pct-touch <百分比> 调整触摸事件的百分比。(触摸事件是屏幕上单个位置的按下-抬起事件。)
--pct-motion <百分比> 调整运动事件的百分比。(运动事件包括屏幕上某个位置的按下事件、一系列伪随机移动和抬起事件。)
--pct-trackball <百分比> 调整轨迹球事件的百分比。(轨迹球事件包括一次或多次随机移动,有时后面跟着一次点击。)
--pct-nav <百分比> 调整“基本”导航事件的百分比。(导航事件包括上/下/左/右,作为来自方向输入设备的输入。)
--pct-majornav <百分比> 调整“主要”导航事件的百分比。(这些导航事件通常会在您的 UI 中触发操作,例如五向方向键的中心按钮、返回键或菜单键。)
--pct-syskeys <百分比> 调整“系统”按键事件的百分比。(这些按键通常保留供系统使用,例如 Home 键、返回键、通话开始键、通话结束键或音量控制键。)
--pct-appswitch <百分比> 调整活动启动的百分比。Monkey 会以随机间隔发出 startActivity() 调用,以最大限度地覆盖您软件包中的所有活动。
--pct-anyevent <百分比> 调整其他类型事件的百分比。这是对所有其他类型事件的概括,例如按键、设备上其他不常用的按钮等等。
约束 -p <允许的包名> 如果您以这种方式指定一个或多个软件包,Monkey 将允许系统访问这些软件包中的活动。如果您的应用需要访问其他软件包中的活动(例如选择联系人),您也需要指定这些软件包。如果您未指定任何软件包,Monkey 将允许系统启动所有软件包中的活动。要指定多个软件包,请多次使用 -p 选项 — 每个软件包使用一个 -p 选项。
-c <主类别> 如果您以这种方式指定一个或多个类别,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 执行,直到调试器附加到它。