1. 保持手机和电脑连接状态
- 连接手机和电脑
- 打开手机开发者模式
- 电脑终端访问:
adb devices
检查是否连接成功,出现设备编号代表连接成功
image.png
2. 获取需要测试的包名
- 手机端打开需要测试的APP
- 电脑终端访问:
adb shell dumpsys window |grep mCurrent
,获取包名
3. 根据命令执行脚本,并输出报告
-
--throttle: 作用:在事件之间插入固定的时间(毫秒)延迟,你可以使用这个设置来减缓Monkey的运行速度,如果你不指定这个参数,则事件之间将没有延迟,事件将以最快的速度生成。
注:常用参数,一般设置为300毫秒,原因是实际用户操作的最快300毫秒左右一个动作事件,所以此处一般设置为300毫秒。 -
--pct-touch:作用:调整触摸事件的百分比。(触摸事件是指在屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作)
注:常用参数,此参数设置要适应当前被测应用程序的操作,比如一个应用80%的操作都是触摸,那就可以将此参数的百分比设置成相应较高的百分比。 -
--pct-motion:调整motion事件百分比。(motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成)。
注:常用参数,需注意的是移动事件是直线滑动,下面的trackball移动包含曲线移动。 -
--throttle(毫秒)事件之间插入的固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定,Monkey将尽可能快的产生并执行事件。
-
-s 用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
-
--ignore-crashes 忽略程序崩溃。设置此选项后,Monkey会执行完所有的事件,不会因crash而停止。
-
--ignore-timeouts 忽略程序无响应。设置此选项后,Monkey会执行完所有的事件,不会因ANR而停止。
-
--ignore-security-exceptions 忽略证书或认证异常。设置此选项后,Monkey会执行完所有的事件,不会因认证或证书异常而停止。
-
--ignore-native-crashes 监视系统中本地代码发生的崩溃
-
--monitor-native-crashes 忽略本地代码导致的崩溃。设置忽略后,Monkey将执行完所有的事件,不会因此停止。
-
-v -v –v 提供最详细的设置信息
-
参考命令
# 运行指定包,并输出报告
adb shell monkey -p com.zhihu.android -v 100 > /Users/monkey/zhihu1.log
# 运行指定包,固定延迟300ms,触摸事件的百分比设置为50%,motion事件百分比设置为50%,输出两级报告到指定位置
adb shell monkey -p com.zhihu.android --throttle 300 --pct-touch 50 --pct-motion 50 -v -v 1000 > /Users/monkey/zhihu2.log
# 运行指定包,设置相关事件信息,并忽略相关异常信息,输出测试报告
adb shell monkey -s 0001 -p com.sd.tongzhuo --throttle 250 --pct-touch 55 --pct-rotation 30 --pct-motion 15 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes --kill-process-after-error -v -v -v 10000 > /Users/monkey/0723_monkey_xiaomi_01.log
4. 检测adb logcat,并输出logcat报告
- 一般来说我们需要打印两份报告,一份monkey报告,一份logcat报告
adb logcat作用:把设备上的操作实时打印出来,比如app崩溃/异常,显示崩溃的原因,如空指针、参数错误、下标越界等。 - 打开新窗口,执行:
adb logcat > ~/Sunlands/monkey/0723_logcat_xiaomi_01.log
- 执行monkey命令,同样保存日志
- 待monkey结束后,ctrl+c中断log抓取
5. 日志分析
monkey日志报告
- monkey执行时未加
--ignore-crashes
--ignore-crashes
参数,就先浏览日志中Events injected: 值
,查看当前已执行的次数,就知道有无bug - 程序无响应的问题:在日志中搜索 “ANR”
- 崩溃问题:在日志中搜索 “CRASH”
- 其他问题:在日志中搜索”Exception”
logcat日志报告
在logcat.log中搜索关键词GC,如果有下面四个中的一个,就可能存在内存泄露。
- GC_FOR_ALLOC, 因为在分配内存时内存丌够引发的
- GC_EXPLICIT, 表明GC被显式请求触发的,如System.gc调用
- GC_CONCURRENT, 表明GC在内存使用率达到一定的警戒值时,自动触发。
- GC_BEFORE_OOM, 表明在虚拟机抛出内存丌够异常OOM之前,执行最后一次回收内存垃圾
如果是ANR问题
搜索“ANR ”关键词(ANR后加个空格,屏蔽掉anr.log文件的无效信息) 。 快速定位到关键事件信息 。
如果是ForceClosed 和其它异常退出信息
搜索"Fatal" 关键词, 快速定位到关键事件信息 。
定位到关键事件信息后 , 如果信息不够明确的,再去搜索应用程序包的虚拟机信息 ,查看具体的进程和线程跟踪的日志,来定位到代码 。
参考文章:
①monkey获取包名
②Monkey命令
③Monkey 测试日志讲解
④Java 常见异常种类
网友评论