一、Monkey 测试工具概述
1.1 概述
Monkey 是 Android SDK 内置的一款命令行工具,专门用于执行稳定性测试。其核心功能在于通过模拟用户的随机操作(例如点击、滑动、输入等),来对应用程序施加压力,以此发现潜在的稳定性问题,如应用程序崩溃、无响应、内存泄露或界面错乱等。这种测试通常在应用正式发布前进行,作为确保软件质量的最后一道防线。
1.2 功能与用途
Monkey 主要应用于以下几个方面:
- 压力稳定性测试:通过高负载模拟用户行为,检验应用在极端条件下的表现。
- 自动化测试:尽管它不遵循传统自动化测试的模式,但依然能够实现测试过程的自动化,提高测试效率。
该工具的主要目标是验证应用是否能够在用户的各种操作下保持稳定,特别是防止出现崩溃现象。
1.3 使用时机
当产品的基本功能已经稳定,且已解决大部分明显缺陷时,可以利用 Monkey 工具进一步测试应用的稳定性和鲁棒性,包括但不限于应用是否会突然退出或崩溃,以及整体系统的兼容性测试。
二、Monkey 参数解析
2.1 命令使用方法
Monkey 命令的基本格式为:adb shell monkey [options]。以下是一些常用的参数及其含义:
| 参数 | 说明 | 示例 |
|---|---|---|
| -p <包名> | 指定一个或多个测试包 | -p com.example.app |
| -s <种子值> | 设置固定的事件序列,相同的种子值会产生相同的事件流,便于问题重现 | -s 12345 |
| --pct-<事件类型> <比例> | 定义各种事件的发生概率 | --pct-touch 50 --pct-swipe 30 --pct-nav 10 --pct-appswitch 5 --pct-anyevent 5 |
| --ignore-crashes | 即使发生崩溃也不终止测试 | |
| --ignore-timeouts | 忽略无响应状态,使测试继续 | |
| --ignore-security-exceptions | 忽略权限异常,防止测试被中断 | |
| -v | 增加日志的详细程度,最多可使用三次 | -v -v -v |
| --throttle <毫秒> | 设置事件之间的延迟时间,模拟真实用户操作 | --throttle 200 |
| --monitor-native-crashes | 监测底层代码的崩溃情况 | |
| <执行次数> | 指定测试过程中执行的事件数量 | 100000 |
| > <路径> | 将日志输出至指定文件 | > D:\monkey_log.txt |
基础使用:
adb shell monkey -p com.example.app -v -v -v 100000 > D:\monkey_log.txt
# 核心命令:测试 com.example.app 包,发送10000次随机事件
adb shell monkey -p com.example.app 10000
高级使用:
除了基本的命令行参数,Monkey 还支持通过白名单和黑名单来限定测试范围。
# 完整命令:测试微信(1万次事件,点击50%+滑动30%,间隔200ms,忽略Crash/ANR,详细日志)
adb shell monkey -p com.tencent.weixin \
-s 67890 \ # 固定种子,方便复现
--pct-touch 50 \ # 点击事件占比50%
--pct-swipe 30 \ # 滑动事件占比30%
--pct-nav 10 \ # 导航键(返回/主页)占比10%
--pct-appswitch 5 \ # App切换占比5%
--pct-anyevent 5 \ # 其他事件(如按键)占比5%
--throttle 200 \ # 事件间隔200ms
--ignore-crashes \ # 忽略崩溃
--ignore-timeouts \ # 忽略ANR
-v -v -v 10000 > D:\monkey_test.log # 日志输出到本地文件
2.2 日志分析
Monkey 测试完成后,可以通过检查日志文件来评估测试结果。正常情况下,日志中会显示测试的总次数和耗时,表明测试成功结束。
如果测试过程中出现问题,应首先检查日志中的异常信息。例如,若遇到应用程序无响应的情况,可在日志中查找 "ANR" 关键词来定位具体问题。
(2)崩溃问题:在日志中查找 "Exception"(如果出现空指针,即NullPointerException),这通常表明存在bug。
当Monkey测试执行中断时,在日志的最后部分可以看到具体的执行次数。
对于APP异常日志的分析,主要关注点包括崩溃、闪退以及ANR(应用程序无响应)。


雷达卡


京公网安备 11010802022788号







