Android之monkey自动化测试文档(Maxim使用教程)
·
Android之monkey自动化测试文档
C:\Users\shenyf>adb shell monkey -p com.bs.finance --throttle 1000 --pct-touch 50 -v 100
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 提供有关测试在运行时的更多详细信息,例如发送到您的 Activity 的各个事件。级别 2 提供更详细的设置信息,例如已选择或未选择用于测试的 Activity。 |
事件命令
| 选项 | 说明 |
|---|---|
| -s <seed> | 伪随机数生成器的种子值。如果您使用相同的种子值重新运行 Monkey,它将会生成相同的事件序列。 |
| --throttle <milliseconds> | 在事件之间插入固定的延迟时间。您可以使用此选项减慢 Monkey 速度。如果未指定,则不延迟,系统会尽快地生成事件。 |
| --pct-touch <percent> | 调整轻触事件所占百分比。(轻触事件是指屏幕上的单个位置上的按下/释放事件。) |
| --pct-motion <percent> | 调整动作事件所占百分比。(动作事件包括屏幕上某个位置的按下事件,一系列伪随机动作和一个释放事件。) |
| --pct-trackball <percent> | 调整轨迹球事件所占百分比。(轨迹球事件包括一个或多个随机动作,有时后跟点击。) |
| --pct-nav <percent> | 调整“基本”导航事件所占百分比。(导航事件包括向上/向下/向左/向右,作为方向输入设备的输入。) |
| --pct-majornav <percent> | 调整“主要”导航事件所占百分比。(这些导航事件通常会导致界面中的操作,例如 5 方向键的中间按钮、返回键或菜单键。) |
| --pct-syskeys <percent> | 调整“系统”按键事件所占百分比。(这些按键通常预留供系统使用,例如“主屏幕”、“返回”、“发起通话”、“结束通话”或“音量控件”。) |
| --pct-appswitch <percent> | 调整 Activity 启动次数所占百分比。Monkey 会以随机间隔发起 startActivity() 调用,以最大限度地覆盖软件包中的所有 Activity。 |
| --pct-anyevent <percent> | 调整其他类型事件所占百分比。这包括所有其他类型的事件,例如按键、设备上的其他不太常用的按钮等等。 |
约束条件命令
| 选项 | 说明 |
|---|---|
| -p <allowed-package-name> | 如果您通过这种方式指定一个或多个软件包,Monkey 将仅允许系统访问这些软件包内的 Activity。如果应用需要访问其他软件包中的 Activity(例如选择联系人),您还需要指定这些软件包。如果未指定任何软件包,Monkey 将允许系统启动所有软件包中的 Activity。要指定多个软件包,请多次使用 -p 选项,每个软件包对应一个 -p 选项。 |
| -c <main-category> | 如果您通过这种方式指定一个或多个类别,Monkey 将仅允许系统访问其中一个指定类别中所列的 Activity。如果没有指定任何类别,Monkey 会选择 Intent.CATEGORY_LAUNCHER 或 Intent.CATEGORY_MONKEY 类别所列的 Activity。要指定多个类别,请多次使用 -c 选项,每个类别对应一个 -c 选项。 |
调试命令
| 选项 | 说明 |
|---|---|
| --dbg-no-events | 指定后,Monkey 将初始启动到测试 Activity,但不会生成任何其他事件。为了获得最佳结果,请结合使用 -v、一个或多个软件包约束条件以及非零限制,以使 Monkey 运行 30 秒或更长时间。这提供了一个环境,您可以在其中监控应用调用的软件包转换操作。 |
| --hprof | 如果设置此选项,则会在 Monkey 事件序列之前和之后立即生成分析报告。这将在 data/misc 下生成大型(约为 5Mb)文件,因此请谨慎使用。如需了解如何分析性能剖析报告,请参阅剖析应用性能。 |
| --ignore-crashes | 通常,当应用崩溃或遇到任何类型的未处理异常时,Monkey 将会停止。如果指定此选项,Monkey 会继续向系统发送事件,直到计数完成为止。 |
| --ignore-timeouts | 通常,当应用遇到任何类型的超时错误(例如“应用无响应”对话框)时,Monkey 将会停止。如果指定此选项,Monkey 会继续向系统发送事件,直到计数完成为止。 |
| --ignore-security-exceptions | 通常,当应用遇到任何类型的权限错误(例如,如果它尝试启动需要特定权限的 Activity)时,Monkey 将会停止。如果指定此选项,Monkey 会继续向系统发送事件,直到计数完成为止。 |
| --kill-process-after-error | 通常,当 Monkey 因出错而停止运行时,出现故障的应用将保持运行状态。设置此选项后,它将会指示系统停止发生错误的进程。注意,在正常(成功)完成情况下,已启动的进程不会停止,并且设备仅会处于最终事件之后的最后状态。 |
| --monitor-native-crashes | 监视并报告 Android 系统原生代码中发生的崩溃。如果设置了 --kill-process-after-error,系统将会停止。 |
| --wait-dbg | 阻止 Monkey 执行,直到为其连接了调试程序。 |

monkey工具的缺点
不支持业务行为定制
经常点到外部的app
经常点击到注销和退出
无法灵活控制
让monkey只执行固定应用的可选用Maxim
E:\dome>git clone https://hub.fastgit.org/zhangzhao4444/Maxim.git
Cloning into 'Maxim'...
remote: Enumerating objects: 239, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 239 (delta 13), reused 19 (delta 4), pack-reused 211Recei
Receiving objects: 100% (239/239), 7.73 MiB | 98.00 KiB/s, done.
Resolving deltas: 100% (88/88), done.
Checking connectivity... done.
E:\dome>cd Maxim
E:\dome\Maxim>adb push framework.jar /sdcard
framework.jar: 1 file pushed, 0 skipped. 90.0 MB/s (1149240 bytes in 0.012s)
E:\dome\Maxim>adb push monkey.jar /sdcard
monkey.jar: 1 file pushed, 0 skipped. 109.9 MB/s (186992 bytes in 0.002s)
E:\dome\Maxim>adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.bs.finance --uiautomatordfs --running-minutes 60 -v -v --throttle 1000
tv.panda.test.monkey.Monkey: monkey入口类,不要修改
com.bs.finance: 被测app包名,需要修改
--uiautomatormix: 遍历策略
策略
1、模式 Mix (基于事件概率的压力测试)
--uiautomatormix
直接使用底层accessibiltyserver获取界面接口 解析各控件,随机选取一个控件执行touch操作。
同时与原monkey 其他操作按比例混合使用
默认accessibilityserver action占比50%,其余各action分剩余的50%
accessibilityserver action占比可配置 --pct-uiautomatormix n
2、模式 DFS
--uiautomatordfs
深度遍历算法
3、模式Troy
--uiautomatortroy
控件选择策略按max.xpath.selector配置的高低优先级来进行深度遍历
4、保留原始monkey
5、总运行时长 --running-minutes 3 运行3分钟
6、--act-whitelist-file /sdcard/awl.strings 定义白名单 --act-blacklist-file
其他参数与原始monkey一致
更多推荐
所有评论(0)