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