目录
一、什么是monkey测试?
二、monkey程序介绍
1、monkey测试是 Android程序 自带的,由 Java语言 写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar
2、monkey程序通过adb来运行
三、操作步骤
1、安装并配置adb环境,adb 1.0.32 下载后解压保存在users/wx目录下
2、查看设备是否连接 :adb devices
3、安装包:adb install *.apk(把文件拖过来)
4、执行monkey测试
monkey测试前的准备操作:
- 确保屏幕处于解锁状态
- 设置屏幕超时时间为最大时间(防止测试过程中手机锁屏,影响monkey测试)
- 打开usb调试,确保adb可以连接
- 抓取adb log(若出现anr,需要将/data/anr下的anr log拿出来,需要手机有root权限)
四、monkey命令说明
adb shell monkey 行为参数 >保存路径
示例:
adb shell monkey -p com.xxx.myapp --throttle 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000000 > d:\mylog.log
五、monkey日志分析报告
1、monkey出现错误后,一般的分析步骤:
- 找到出现错误的位置
- 找到出现错误前面两个Switch之间的activity
- 手动执行操作,复现问题
- 若上述步骤不能找出产生的错误,输入相同的seed值,重复安装之前的命令跑monkey
2、在日志中搜索关键词&分析
ANR | 有无应用无响应事件 |
crash | 有无奔溃事件 |
exception | 有无其他异常事件 若出现空指针nullpointerexception,需格外重视 |
GC | 内存泄漏问题 |
① ANR问题
一般是主线程的响应超过5秒或者broadcastReceiver没有在10秒内做出响应。是一个比较严重的缺陷,把耗时的操作另起线程来处理即可
② 分析log中的具体信息
如:
log中的第一个Switch,主要是查看monkey执行的是哪一个activity
(上面的log,执行的是com.tencent.smtt.SplashActivity)
在下一个Switch之间,若出现奔溃或其他异常,可以在该activity中查找问题所在
③ 内存泄漏
内存泄漏一般会弹出out of memory对话框,如果没弹出,可以通过logcat文件GC出信息
(GC:Java的垃圾回收机制)
GC信息 | 问题 |
---|---|
GC_FOR_ALLOC | 分配内存时内存不足引起 |
GC_EXPLICIT | GC是被显性请求触发的 |
GC_CONCCURRENT | GC在内存使用率达一定警戒值时,自动触发 |
GC_BEFORE_OOM | 虚拟机抛出内存不够异常oom之前,执行最后一次回收内存垃圾 |
发现内存泄漏,需要分析内存报告(利用hprof参数的内存快照生成内存报告)
执行相同的monkey,只多加一个参数-hprof
指定了-hprof选项,monkey会在发送时间前后生成app内存快照文件,生成的hprof的文件一般会在手机的/data/misc目录下(/data/misc需要root权限,可以在手机中安装个RE或通过手机助手查看)
文件转换:
- 配置monkey测试时的sdk-tools下查看是否hprof-conv命令
- 在命令行输入hprof-conv -help得知文件转化用法,直接转化(由.hprof转化成.conv格式)
- 转化后的文件用eclipse的Memory Analyzer tool(MAT)查看(此插件可以下载),可以点击 Reports->Leak Suspects链接来生成报告。