本文为个人学习整理笔记,仅用于技术交流与学习分享
Monkey测试?为什么会叫这个名字?Monkey是不是猴子🐒吗?😂
是这样滴:😊因为这个测试工具是随机乱点、乱滑、乱按,行为跟一只发疯乱敲的猴子一模一样,所以就叫 Monkey 测试。
一、ADB连接真机
1、USB连接(插线版)
- 拿手机数据线,一头插手机,一头插电脑USB口
- 手机里打开「开发者选项」,把「USB调试」开关打开(找不到开发者选项?去「设置-关于手机」,狂点7次「版本号」就出来了)
打开开发者选项

打开usb调试

- 电脑打开cmd命令提示符,输入
adb devices回车 - 只要跳出一串设备号+
device,就说明连好了!电脑现在能控制你手机了
2、WiFi连接(无线版)
- 先按上面USB的方法,用数据线把手机和电脑连好,确保
adb devices能看到设备(这一步是"激活"无线功能,必须先插线) - 电脑cmd里输入
adb tcpip 5555回车(给手机开个专门的无线连接端口5555) - 现在可以把数据线拔掉了!
- 去手机「设置-关于手机-状态信息」,找到手机的WiFi IP地址(比如
192.168.1.100) - 电脑cmd里输入
adb connect 你手机的IP:5555(比如adb connect 192.168.1.100:5555)回车 - 跳出
connected to xxx:5555,再输adb devices能看到IP+端口,就说明无线连好了!以后不用插线,电脑也能控制手机
二、为什么进行Monkey
它其实是一种压力测试。
Monkey 测试就是让系统自动乱点、乱滑、乱输 ,模拟用户疯狂、无规律地使用 APP,用来做压力测试 + 稳定性测试。
主要目的就这几个:
-
看 APP 会不会崩溃(Crash)
正常手动点很难测出来的隐藏 Bug,让 Monkey 疯狂乱点,很容易把程序点崩,提前发现问题。
-
看 APP 会不会卡死、无响应(ANR)
长时间、高强度乱操作,考验 APP 扛不扛造,会不会卡死不动。
-
快速做压力测试
不用人一直点,让程序自动跑几小时甚至几天,模拟大量用户、长时间使用的场景,检验稳定性。
-
在版本上线前快速扫雷
作为基础兜底测试,保证 APP 不会一用就崩,提高用户体验。
我们什么场景下会用这个monkey测试呢?
- 用户使用人数比较多
- 用户使用时间比较长
三、什么是Monkey测试
Monkey测试是压力测试,也是稳定性测试,而且它是基于安卓的自动化测试的一种手段。它并不能测试我们的IOS。就是模拟用户的按键输入,手势输入,看被测app在多长时间会有异常。
执行Monkey测试的阶段是什么阶段?
项目基本稳定的情况下,项目验收前我们需要执行Monkey测试
四、Monkey工具的安装
Monkey工具的安装参照下述内容👇
Monkey 测试必须安装的工具 :
Monkey 运行依赖 JDK + Android SDK + 模拟器(夜神)
- JDK(运行 Java 环境,adb、monkey 都依赖它)
- Android SDK (自带
adb+monkey工具本体) - 安卓设备/模拟器(这里用夜神模拟器)
对于sdk和夜神模拟器我们在之前安装过了课参考如下👇:
adb环境
我们先在只需安装jdlk即可
- adb、monkey 都是 Java 编写的
- 没装 JDK → 环境跑不起来 / 命令报错
建议用 JDK 8 (最稳定,适配 adb、monkey)
官网下载(选 Windows x64 安装包):
https://www.oracle.com/java/technologies/downloads/#java8-windows
找不到也可以直接搜:jdk 8 windows x64 安装版
安装 JDK
-
双击安装包
-
一路 下一步
-
记住安装路径(默认一般是)
C:\Program Files\Java\jdk1.8.0_xxx后面配置环境变量要用。
配置环境变量
- 右键 此电脑 → 属性 → 高级系统设置 → 环境变量
- 在下面 系统变量 里操作:
新建 JAVA_HOME
-
变量名:
JAVA_HOME -
变量值:填你上面的 JDK 安装路径
例如:C:\Program Files\Java\jdk1.8.0_301
编辑 Path
找到系统变量里的 Path → 编辑 → 新建 2 条:
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
新建 CLASSPATH(必须加前面的点)
-
变量名:
CLASSPATH -
变量值:
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
验证是否成功
打开 cmd,输入:
bash
java -version
出现版本号类似下面就成功:
java version "1.8.0_301"
Java(TM) SE Runtime Environment ...
五、如何进行Monkey测试
我们是基于adp命令执行monkey测试的。
回顾知识
-
Monkey 是干什么的?
Monkey = 一只乱点屏幕的猴子它不听指挥,随机乱点、乱滑、乱按按键 ,专门帮你把 APP 里藏得很深的崩溃、卡死给测出来。
测试人员用它做压力测试、稳定性测试。
-
一个包名 = 一个 APP
包名就是 APP 在安卓里的唯一身份证。
- 你测哪个 APP,就用哪个 APP 的包名
- 命令里写
-p 包名= 只测这一个 APP,不碰别的软件
1、先连设备(第一步!)
- 打开夜神模拟器 / 插上手机
- 开启开发者选项、USB调试
- 电脑 cmd 里输入:
连接夜神
bash
adb connect 127.0.0.1:62001
bash
adb devices
看到下面这种,才叫连上了:
List of devices attached
127.0.0.1:62001 device
- 出现
device→ 可以执行 monkey - 没出现 → 命令敲烂了也没用
2、再查包名
bash
adb shell pm list packages
3、再执行 monkey 命令
monkey 测试的命令格式:
adb shell monkey 可选参数 事件数
4、可选参数的意思
4.1. -p 包名
指定要测试的 APP,一个 -p 对应一个 APP。
4.2. --ignore-crashes
忽略崩溃,APP 崩了继续测,不中断。
4.3. --ignore-timeouts
忽略 ANR(APP 卡死无响应),继续测。
4.4. --ignore-security-exceptions
忽略安全证书、权限异常。
4.5. -s 种子值
两次用相同的 -s 数字,操作顺序一模一样,方便复现 BUG。
4.6. -v
日志级别:
-v:简单日志-v -v:更详细-v -v -v:最详细日志
4.7. --throttle 毫秒
每个事件之间延时,单位毫秒。
行业通用:450 毫秒。
5、最核心:Monkey 命令格式
标准格式
text
adb shell monkey [-p 包名] 参数[可以是多个] 事件数
- adb shell:进入手机系统
- monkey:启动猴子工具
- -p 包名:指定你测的app
- 参数:控制猴子怎么乱点
- 事件数:让猴子点多少次
6、必背 5 条常用命令(直接复制改一改就能用)
6.1. 最简单:整机乱点 500 次
adb shell monkey 500
作用:手机所有界面乱点 500 下,练手用。
截图:


6.2. 只测你自己的 APP(最常用!)
adb shell monkey -p 包名 500
查包名
bash
adb shell pm list packages

测试对应包示例:


adb shell monkey -p com.android.browser 500
只测浏览器,不乱点别的。【注意我们只能测有界面的 APP,阿卓系统底层的我们测不了】
我们卡住了

中断就导致后面的测不了,所以我们接下来看我们测试的时候如何忽略异常
6.3. 忽略崩溃、卡死、安全证书,让猴子一直测
adb shell monkey -p 包名
--ignore-crashes
--ignore-timeouts
--ignore-security-exceptions
500
翻译:
--ignore-crashes:APP 崩了继续测--ignore-timeouts:APP 卡死(ANR)继续测- --ignore-security-exceptions:忽略安全证书、权限异常。
6.4. 加延时:让猴子点慢一点
adb shell monkey -p 包名
--throttle 450
500
--throttle 450:每点一次停 450 毫秒
太快手机会卡死,行业通用 450ms 。
设置延时的单位是为毫秒的,我们一般设置为450毫秒。
6.5. 看详细日志 + 固定操作轨迹
adb shell monkey -p 包名
-s 123
-v -v -v
--throttle 450
500
-s 123:seed种子值,下次用同样数字,猴子操作顺序一模一样(方便复现)比如两次monkey测试执行的相同seed值,那么就表示操作的动作是一样的,但是操作的界面及对象不能确定一样。-v -v -v:-v代表日志的级别程度,-v越多,日志最详细,方便找BUG

7、夜间压测命令
我们下班前跑,第二天看结果,这是稳定测试命令 :
进行Monkey测试的时候,我们如何进行分析呢,一般我们在下班后进行 monkey测试的执行,然后第2天回来看结果,那么设置多少个事件数,延长时间为多少合适呢?
😊我们一般事件数设置为35万,延时设置为450毫秒。
adb shell monkey
-p com.你的包名
--ignore-crashes
--ignore-timeouts
--ignore-security-exceptions
--throttle 450
-s 666
-v -v -v
350000
格式完全是:adb shell monkey -p 包名 参数[可以是多个] 事件数
说明:
- 350000 次事件(350000)
- 每次间隔 450ms(--throttle)
- 忽略崩溃、ANR、证书安全异常(--ignore-crashes 和--ignore-timeouts和--ignore-security-exceptions )
- 带种子、带详细日志(-s和-v)
跑一晚上完全没问题。
8、怎么看结果?【结果分析】
只看最后一行!
前提你要加日志,不加 -v,日志级别太低,系统根本不打印最后那句 Monkey finished!

加日志之后:
-
出现
Monkey finished✅ 测试通过,没出致命问题
例如:

-
没出现这句话,中途断了
❌ 出问题了,要提BUG
常见问题
- 出现
Crash:APP 崩了 - 出现
ANR:APP 卡死无响应 - 手机重启、关机
- 命令直接断掉、闪退
这些全是 BUG!
9、最重要:测出来问题,怎么提BUG?
提交到禅道
注意我们进行monkey测试提交bug的时候,bug的标题中需要加入monkey测试出现 bug的类型,如下👇
BUG 标题格式
【Monkey测试】APP出现XXX类型Bug
示例:
- 【Monkey测试】APP出现Crash崩溃
- 【Monkey测试】点击过程中出现ANR
- 【Monkey测试】执行过程中手机自动重启
BUG 内容模板
复现步骤:
-
连接手机,执行 Monkey 命令 或者 连接夜神模拟器,执行 Monkey 命令
-
命令如下:
(把你跑的命令粘贴过来)
-
执行过程中出现异常
测试结果:
出现 XXX(Crash/ANR/重启/闪退)
日志截图:
(贴日志截图)
手机信息:
品牌型号 + 系统版本
预期结果:
Monkey 执行完成,显示 Monkey finished
实际结果:
出现 XXX 异常,中断执行
10、最容易踩的 4 个坑
-
不加 --throttle
→ 手机直接卡死、发热、测不下去
-
不加忽略异常
→ 一崩就停,测不了多久
-
事件数写太大
→ 新手先从 500、1000 开始练
-
不知道包名
→ 用
adb shell pm list packages查
至此,我们关于 App 测试相关的笔记就整理完毕了,App 测试阶段也暂时告一段落。感谢大家一路以来的陪伴与支持,本期内容到此结束,最后,如果觉得笔记对你有用,记得给小特点赞+关注哦~
我们下期再会~🎉👋