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 <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 执行,直到调试器附加到它。