前言
如何利用monkey分析ANR、CRASH、以及monkey運行期間的系統日志?
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 jixiang.com.myandroid --ignore-crashes --ignore-timeouts --ignore-native-crashes --pct-motion 60 -v -v --throttle 200 -s 200 1000 2>d:/error.txt 1>d:/verbose.txt
monkey命令行解釋:此monkey命令行表示將monkey命令運行期間產生的level2級別的日志(運行程序期間產生的錯誤日志,類比python中的日志級別error)重定向至 d:/error.txt 文件中;將monkey命令運行期間產生的level1級別的日志(運行程序期間的正常日志,類比python中的日志級別info)重定向至 d:/verbose.txt 文件中。
adb shell monkey -p jixiang.com.myandroid --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命令行中的重定向到日志文件的部分引起來
3、獲取log日志文件
log日志文件做一個概要性解釋:
File | description |
---|---|
error.txt | 記錄了MONKEY測試時產生的一些ANR、強制關閉等異常 |
verbose.txt | 記錄了MONKEY測試時發送的各種事件,如觸摸事件的位置等等 |
log.txt | 此文件在手機上的LOG文件夾中(data/log目錄)中,主要主要記錄程序對MONKEY測試時的響應情況 |

log.txt日志
①如果使用Android Studio開發工具作為安卓模擬器,則其自帶的logcat就可以查看所有adb命令包括monkey命令運行期間產生的所有日志。【注意:此時的log.txt日志文件中不分日志的等級,即無論level1級別的日志或者level2級別的日志都會顯示在其中】
②如果使用安卓真機或者安卓模擬器等設備,可以通過 adb logcat > log.txt 命令將所有級別的monkey日志重定向至log.txt日志文件中查看。
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.MONKEY
緊接着其后面就是一個數據列表,是用來展示本次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%
緊跟其后的就是一個個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_LEFT
在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 finished
verbose.txt日志文件到此標記着level1級別日志的結束,即monkey命令運行結束。
error.txt 錯誤日志
①error.txt日志文件為monkey命令運行期間產生的安卓應用程序運行錯誤的日志;
②當monkey命令運行在安卓設備或者模擬器上沒有出現應用程序運行錯誤的時候,此文件會為空;一旦運行monkey命令期間安卓應用程序發生錯誤,會將錯誤的部分日志內容重定向至error.txt日志文件中。
③在運行monkey命令以達到測試安卓應用程序穩定性的時候,最好是通過monkey的命令行參數忽略安卓應用程序可能發生的錯誤,讓程序可以繼續運行下去,monkey命令同樣可以運行下去。【monkey命令運行期間應用程序發生錯誤不影響錯誤日志重定向至error.text日志文件】
monkey測試檢測到的安卓應用程序錯誤類型分為三種:
①CRASH:系統崩潰日志,當Apk存在崩潰的情況下會反饋相應的數據。
②ANR:當ANR情況出現時,會反饋相應的數據。
③常見的Exception:進行monkey測試時,應用程序存在一些Exception同樣會反饋相應的異常數據。
error.txt日志文件截圖如下: