
由于monkey在測試app時,我們需要作長時間的穩定性測試,比如連續測試10小時(monkey不能指定時間,可以指定次數,時間可以在測試次數的日志基礎上大概算出來),在測試過程中,app很可能測試時間不久,因為碰到問題而崩潰,此時測試會停止,而達不到我們長期測試的目的,我們需要通過調試參數來讓測試執行繼續,主要的幾個參數如下:
--ignore-crashes 指即使應用程式崩潰,Monkey依然會發送事件,直到事件計數達到指定的次數為止。如:
adb shell monkey -p cn.mopon.film --ignore-crashes 10000
說明:即使應用程式崩潰,Monkey依然會發送事件,直到事件計數達到10000為止。
--ignore-security-exceptions 指APP發生許可證書錯誤時,Monkey依然繼續發送事件,直到事件數目達到目标值為止
adb shell monkey -p cn.mopon.film --ignore-security-exceptions 1000
--ignore-timeouts 指app在發生 ANR(Application No Responding)錯誤時,Monkey是否停止運作如果使用--ignore-timeouts參數,即使應用程式發生ANR錯誤,Monkey依然會發送事件,直到事件計數完成,如
adb shell monkey -p cn.mopon.film --ignore-timeouts 1000
--kill-process-after-error 指APP發生錯誤時,應用程式停止運作并保持在目前狀,如:
adb shell monkey -p cn.mopon.film --kill-process-after-error 1000
當應用程式發生錯誤時,應用程式停止運作并保持在目前狀态,注意系統并不會結束該應用程式的程序。
也多個控制參數一起使用:
adb shell monkey -p cn.mopon.film --ignore-crashes --ignore-timeouts 10000
注:當app崩潰,發生ANR錯誤時繼續測試
Monkey指令和事件等綜合運用參考
adb shell monkey -p cn.mopon.film (替換要測試的包名) --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000000>d:monkeyLog.log
Monkey測試可以發現的問題
Android平台應用程式可能産生以下四種Crash:
App層(java應用):1、Force Close Crash 2、ANR Crash
Native層(本地架構):3、Tombstone Crash(Native Crash)
Kernel層(LINUX核心空間):4、Kernel Panic
Money日志定位問題
1 .monkey作長時間穩定性測試時,由于無人值守,是以測試的結果主要靠日志來看,典型Monkey測試日志檔案輸出,如下:
//主要Log檔案說明
anr目錄:從手機/data/anr導出的日志,儲存發生anr crash 時的相關資訊;
dontpanic目錄:從手機/data/dontpanic/導出的日志,儲存發生Kernel Panic時的相關資訊;
Tombstone目錄:從手機/data/tombstones/導出的日志,儲存發生Tombstone Crash時的錯誤資訊;
dropbox目錄:從手機/data/tombstones/導出的日志,經過dropbox服務截取的部分tombstones錯誤資訊;
BugReportLog.log:通過adb shell bugreport指令提取的系統各種資訊;
MonkeyScreenLog.Log:儲存Monkey測試過程、應用層錯誤資訊,發生Native Crash時,在此檔案也會有記錄;
2 .通過日志定位問題步驟
(1) 在MonkeyScreen.Log日志檔案搜尋關鍵詞“Fatal”、“Crash”、“ANR”定位到發生Crash的詳細堆棧資訊,或分析發生Crash前後的日志事件,如圖所示:
(2)檢查dropbox目錄下是否有相關crash日志資訊,主要關注是否有以下4類crash錯誤資訊:data_app_wtf,data_app_anr,data_app_crash,system_server_watchdog,如圖:
(3) 檢查tombstone目錄是否有生成日志,有的話說明發生過native crash,如圖:
(4)通過anr目錄中的日志檔案或BugReport.log日志檔案,進一步分析問題原因;
(5)通過上述日志資訊,結合代碼分析或通過搜尋引擎尋找對應問題的可能錯誤,定位解決問題。
Monkey背景運作
作用:使得android系統的裝置脫離PC,獨立運作monkey和記錄logcat和monkey日志。
方法如下:
1. 連接配接裝置和PC;
2 .adb shell 指令進入指令行模式;
3. 輸入 logcat 指令(日志檔案的位址使用> /sdcard/logcat_x.log),之後回車,
如:logcat -v time >/sdcard/logcat_x.log
4 .輸入 monkey 指令(日志檔案的位址使用> /sdcard/monkey_x.txt),回車;
如:monkey -p packageName --throttle 500 -v -v -v 1000000 >/sdcard/monkey.log 對于其餘的monkey指令的參數可以自己添加
5 .此時monkey開始運作,拔掉裝置和PC的資料線;
6 .确認logcat和monkey的日志記錄,可以重新連接配接裝置和PC,通過adb shell進入日志儲存的目錄,使用 ls –l檢視,logcat和monkey日志檔案的大小不斷增加,說明測試一直在寫入日志。