Monkey压力测试
文章目录
一、 Monkey测试概述
1. 什么是Monkey测试?
Monkey是Android自带的一种伪随机压力测试工具。它通过生成随机的用户事件(如触摸、滑动、按键等),模拟用户在高压和随机操作下的行为,主要用于测试App的稳定性和健壮性。
2. 核心优缺点
- 优点:快速发现崩溃/ANR、无需编写复杂脚本、支持长时间自动化运行。
- 缺点:缺乏业务针对性(随机操作无法覆盖特定业务流程)、无法模拟复杂的业务逻辑。
二、 测试环境与准备
在开始测试前,需确保以下基础环境就绪:
- 安装配置:安装Android SDK并配置好环境变量,确保
adb命令可用。 - 连接设备:通过USB连接真机或启动模拟器,使用
adb devices确认设备已连接。 - 获取包名:使用
adb shell pm list packages查询并确认待测App的包名(如com.tencent.mm)。 - 找到当前停留的包名:
adb shell dumpsys window | findstr "mCurrentFocus"
三、 核心命令与参数配置
Monkey命令的基本格式为:adb shell monkey [参数] <事件数量>
1. 基础控制参数
| 参数 | 作用说明 | 示例 |
|---|---|---|
-p | 指定包名(必须,限制测试范围) | -p com.example.app |
-v | 日志级别(最多3个,-v -v -v最详细) | -v -v -v |
--throttle <毫秒> | 事件延迟(模拟真实用户操作速度) | --throttle 1000 (延迟1秒) |
--seed <值> | 随机种子(相同seed可复现相同操作序列) | --seed 12345 |
2. 异常处理参数
| 参数 | 作用说明 |
|---|---|
--kill-process-after-error | 遇到崩溃(Crash)或ANR时立即停止测试。 |
--ignore-crashes | 遇到崩溃时忽略并继续测试。 |
--ignore-timeouts | 遇到ANR(超时)时忽略并继续测试。 |
四、 事件类型与比例控制(核心调优)
Monkey允许你精确控制各类事件的触发比例(总和需为100%),以模拟特定的用户行为:
| 事件类型 | 参数控制 | 描述 |
|---|---|---|
| 触摸事件 | --pct-touch <百分比> | 模拟点击、长按等屏幕触摸操作。 |
| 手势/滑动 | --pct-motion <百分比> | 模拟滑动、拖拽等手势操作。 |
| 系统按键 | --pct-syskeys <百分比> | 模拟Home、Back、菜单等系统级按键。 |
| 导航事件 | --pct-nav <百分比> | 模拟方向键等导航操作。 |
| Activity切换 | --pct-appswitch <百分比> | 随机启动不同的Activity。 |
| 屏幕旋转 | --pct-rotation <百分比> | 模拟屏幕横竖屏旋转。 |
五、 高级用法与日志管理
1. 限制测试范围
- 限制Activity:使用
--activity-filter <activity-name>防止Monkey跳转到非目标页面。 - 多包名测试:可以传入多个
-p参数同时测试多个应用。
2. 日志级别详解
-v:基础日志(每1000个事件统计一次,仅记录崩溃/异常)。-v -v:中等日志(记录每个事件的具体类型)。-v -v -v:最高级别(记录时间戳、App状态变化及底层调试信息,推荐排查问题时使用)。
3. 日志导出
将日志保存到本地文件以便后续分析:
adb shell monkey -p com.example.app -v -v -v 1000 > monkey_log.txt
六、 结果分析与问题定位
测试完成后,通过分析日志文件来判定App的稳定性:
- 🟢 正常结束:日志末尾出现
Monkey finished,且无严重错误关键字。 - 🔴 异常定位(重点搜索以下关键字):
CRASH/exception:应用发生崩溃(需结合堆栈信息定位代码行)。ANR:应用无响应(通常伴随主线程阻塞的日志)。E/ACRA或 特定业务相关的Exception。
七、 实战演练与最佳实践
痛点解决:如何防止Monkey按Home/Back键退出App?
解决方案:将系统按键事件比例设为0,即添加参数 --pct-syskeys 0。
终极实战:1分钟高强度压测命令
需求:测试微信(com.sankuai.meituan),点击50%,滑动50%,防退出,遇崩溃停止,延迟1秒,最高日志级别,输出到当前目录的 log.txt。
(注:1分钟 = 60秒,延迟1秒即执行60次事件)
完美命令:
adb shell monkey -p com.cat.readall --pct-touch 50 --pct-motion 50 --pct-syskeys 0 --throttle 1000 --kill-process-after-error -v -v -v 60 > ./log.txt
进阶:Monkey + Logcat 双管齐下
为了捕获更完整的系统级崩溃信息,可以将Monkey日志与Android系统的Logcat日志同时抓取。
在 Windows 系统下,想在一个黑框里搞定,我们需要请出一个专门的“后台运行”指令:start /b。它的作用就是:把命令藏到后台默默执行,表面上看起来什么都没发生。
你只需要复制下面这一整行命令,粘贴到你的黑框里,按下回车即可:
start /b adb logcat > logcat.txt & adb shell monkey -p com.cat.readall --pct-touch 50 --pct-motion 50 --pct-syskeys 0 --throttle 1000 -v -v -v 100 > log.txt
- 注意:(linux中的写法)
adb logcat > monkey_log.txt & adb shell monkey -p com.cat.readall -- pct-touch 50 --pct-motion 50 --pct-syskeys 0 --throttle 1000 --kill-process-after-error -v -v -v 100
-
按下回车后,你的黑框会发生什么?
- “摄像机”已隐藏开机:
start /b会把adb logcat扔到后台默默录像(存入logcat.txt),黑框里不会有任何提示。 - “演员”立刻上场:紧接着,黑框里会立刻开始显示 Monkey 执行 100 次操作的进度。
- 表演结束:大概 100 秒后,Monkey 跑完,黑框里重新出现
D:\...>的提示符,说明测试结束了。
- “摄像机”已隐藏开机:
🎉 搞定!现在你的文件夹里已经同时生成了 log.txt 和 logcat.txt 两个文件。
- 唯一需要注意的“收尾工作”(必看)
虽然黑框里提示 Monkey 跑完了,但后台的“摄像机”(Logcat)还在傻傻地一直录像。
为了关掉它,当你看到黑框出现 D:\...> 提示符后,请紧接着输入下面这条命令并回车:
taskkill /F /IM adb.exe
(这条命令的意思是:强行结束所有的 adb 进程。输入后,后台的 logcat 就会乖乖停止录制了。)
更多推荐



所有评论(0)