monkey日志分析
monkey日志分析
1. 前言
如何利用monkey分析ANR、CRASH、以及monkey运行期间的系统日志?
2. log文件配置
1. 首先对于monkey运行的日志文件命名需要有相应的规范。
①建议将monkey命令运行期间产生的level1级别的日志(2V)的日志文件名命名为verbose.txt;主要用来观看日志信息和时间分布信息
②建议将monkey命令运行期间产生的level2级别的日志(3V)的日志文件名命名为error.txt;主要是用来查看error的信息,做进一步的bug分析。
Code | description |
---|---|
2>/sdcard/error.txt | Level 2日志保存到sdcard上的error.txt中 |
1>/sdcard/verbose.txt | Level 1日志保存到sdcard上的verbose.txt中 |
2. 需要在monkey命令行中添加dos命令将monkey命令运行的内容重定向到日志文件中。
adb shell monkey -p com.xiaoduomydagong.mywork.sit --ignore-crashes --ignore-timeouts --ignore-native-crashes --pct-motion 60 -v -v --throttle 200 -s 200 1000 2>d:/error.txt 1>d:/verbose.txt1.
monkey命令行解释:此monkey命令行表示将monkey命令运行期间产生的level2级别的日志(运行程序期间产生的错误日志,类比python中的日志级别error)重定向至 d:/error.txt 文件中;将monkey命令运行期间产生的level1级别的日志(运行程序期间的正常日志,类比python中的日志级别info)重定向至 d:/verbose.txt 文件中。
adb shell monkey -p com.xiaoduomydagong.mywork.sit --ignore-crashes --ignore-timeouts --ignore-native-crashes --pct-motion 60 -v -v --throttle 200 -s 200 1000 "2>/sdcard/error.txt 1>/sdcard/verbose.txt"
# 若是使用PC运行monkey命令并保存在PC端,则在monkey命令的重定向处不需加" ",但是若是需要将monkey命令运行产生的日志信息保存在手机文件夹中,需要添加" "将monkey命令行中的重定向到日志文件的部分引起来1.2.3.
3. 获取log日志文件
log日志文件做一个概要性解释:
File | description |
---|---|
error.txt | 记录了MONKEY测试时产生的一些ANR、强制关闭等异常 |
verbose.txt | 记录了MONKEY测试时发送的各种事件,如触摸事件的位置等等 |
log.txt | 此文件在手机上的LOG文件夹中(data/log目录)中,主要主要记录程序对MONKEY测试时的响应情况 |
通过检查verbose.txt文件的反馈信息,内容底部出现 Monkey finished 代表Monkey运行结束。
而测试相关人员则需要对这三个文件进行分析整理,以便提交开发人员处理。
3. log.txt日志
①如果使用Android Studio开发工具作为安卓模拟器,则其自带的logcat就可以查看所有adb命令包括monkey命令运行期间产生的所有日志。【注意:此时的log.txt日志文件中不分日志的等级,即无论level1级别的日志或者level2级别的日志都会显示在其中】
②如果使用安卓真机或者安卓模拟器等设备,可以通过 adb logcat > log.txt 命令将所有级别的monkey日志重定向至log.txt日志文件中查看。
4. verbose.txt运行日志
verbose.txt日志文件截图如下图所示:
其中:
:Monkey: seed=200 count=1000 # seed为随机数生成器seed值,count为本次设置的操作次数
:AllowPackage: com.changan.facein # 后面为指定测试的包名
# monkey进程的category
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY1.2.3.4.5.6.7.
紧接着其后面就是一个数据列表,是用来展示本次monkey测试所有随机事件类型的百分比:
* Event percentages本次测试的事件分布频率
* 0:触摸事件百分比,即参数–pct-touch
*1:滑动事件百分比,即参数–pct-motion
*2:缩放事件百分比,即参数–pct-pinchzoom
*3:轨迹球事件百分比,即参数–pct-trackball
*4:屏幕旋转事件百分比,即参数–pct-rotation
*5:获取危险权限事件百分比,即参数–pct-permission//低版本没有
*6:基本导航事件百分比,即参数–pct-nav
*7:主要导航事件百分比,即参数–pct-majornav
*8:系统事件百分比,即参数–pct-syskeys
*9:Activity启动事件百分比,即参数–pct-appswitch
*10:键盘翻转事件百分比,即参数–pct-flip
*11:其他事件百分比,即参数–pct-anyevent
// Event percentages:
// 0: 6.6666665%
// 1: 60.0%
// 2: 0.8888889%
// 3: 6.6666665%
// 4: -0.0%
// 5: -0.0%
// 6: 11.111112%
// 7: 6.6666665%
// 8: 0.8888889%
// 9: 0.8888889%
// 10: 0.44444445%
// 11: 5.7777777%1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.
紧跟其后的就是一个个switch的内容,截取一段解释:
# swicth的意义是表示Monkey命令此时在此安卓应用程序的具体哪个界面进行测试
Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.changan.facein/.activity.WelcomeActivity;end
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.changan.facein/.activity.WelcomeActivity } in package com.changan.facein
// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.changan.facein/.activity.WelcomeActivity } in package com.changan.facein
# motion时间,以及motion参数
:Sleeping for 200 milliseconds
:Sending Key (ACTION_DOWN): 21 // KEYCODE_DPAD_LEFT
:Sending Key (ACTION_UP): 21 // KEYCODE_DPAD_LEFT1.2.3.4.5.6.7.8.9.
在verbose.txt日志文件结尾处一般会有以下内容:
# Events injected 截止次数
Events injected: 1000
:Sending rotation degree=0, persist=false
:Dropped: keys=0 pointers=0 trackballs=0 flips=2 rotations=0
# 整个测试完成持续时间为42539ms。(1s=1000ms)
Network stats: elapsed time=42539ms (0ms mobile, 0ms wifi, 42539ms not connected)
# monkey测试结束标识
// Monkey finished1.2.3.4.5.6.7.8.9.10.
verbose.txt日志文件到此标记着level1级别日志的结束,即monkey命令运行结束。
5. error.txt 错误日志
①error.txt日志文件为monkey命令运行期间产生的安卓应用程序运行错误的日志;
②当monkey命令运行在安卓设备或者模拟器上没有出现应用程序运行错误的时候,此文件会为空;一旦运行monkey命令期间安卓应用程序发生错误,会将错误的部分日志内容重定向至error.txt日志文件中。
③在运行monkey命令以达到测试安卓应用程序稳定性的时候,最好是通过monkey的命令行参数忽略安卓应用程序可能发生的错误,让程序可以继续运行下去,monkey命令同样可以运行下去。【monkey命令运行期间应用程序发生错误不影响错误日志重定向至error.text日志文件】
1. monkey测试检测到的安卓应用程序错误类型分为三种:
①CRASH:系统崩溃日志,当Apk存在崩溃的情况下会反馈相应的数据。
②ANR:当ANR情况出现时,会反馈相应的数据。
③常见的Exception:进行monkey测试时,应用程序存在一些Exception同样会反馈相应的异常数据。
error.txt日志文件截图如下: