monkey 命令詳解
monkey命令詳解
1. $ adb shell monkey <event-count> <event-count>是隨機發送事件數
例:adb shell monkey 1000 發送1000個隨機事件
2. $ adb shell monkey [options] <event-count> [options]是monkey可傳入的參數
Monkey的option主要分為:常規類、事件類、約束類和調試類4種
2.1 常規類命令:
adb shell monkey -v <event-count>
-v:打印出日誌信息,每個-v將增加反饋信息的級別。-v越多日誌信息越詳情,最多支持3個-v
2.2 事件類命令:
$ adb shell monkey -f <scriptfile> <event-count>
-f:後接測試腳本名,表示要使用monkey運行指定的monkey腳本,
如:$ adb shell monkey -f /mnt/sdcard/test01 3
註:這裏的3是指循環次數,不是事件數
如果希望重復執行之前的隨機操作,需要加-s命令,可指定隨機數生成器seed值
$ adb shell monkey -s <seed> <event-count>
-s: 後接隨機數生成器的seed值,如果使用相同的seed值再次運行monkey,將生成相同的事件序列(也就是說,重復執行剛才的隨機操作)
如: $ adb shell monkey -s 100 1000
$ adb shell monkey --throttle <milliseconds>
--throttle:後面接時間,單位為ms,表示事件之間的固定延遲(即執行每一個指令間隔的時間),如果不接該項,monkey將不會延遲
$ adb shell monkey --pct-touch <percent>
--pct-touch:後面接觸摸事件百分比,觸摸事件泛指發生在某一位置的一個down-up事件,點擊
$ adb shell monkey --pct-montion <percent>
--pct-motion:後面接動作事件百分比,動作事件泛指從某一位置接下(即down事件)後經過一系列偽隨機事件後彈出(即up事件)
$ adb shell monkey --pct-trackball <percent>
--pct-trackball:後面接軌跡事件百分比,軌跡事件包括一系列的隨機移動,以及偶爾跟隨在移動後面的點擊事件
$ adb shell monkey --pct-nav <percent>
--pct-nav:後面接基本導航事件百分比,基本導航事件主要來自方向輸入設備的上、下、左、右事件
$ adb shell monkey --pct-majornav <percent>
--pct-marjornav:後面接主要導航事件百分比,主要導航事件通常指引發圖形界面的一些動作,如鍵盤中間按鍵、返回按鍵、菜單按鍵等
$ adb shell monkey --pct-syskeys <percent>
--pct-syskeys:後面接系統按鍵事件百分比,系統按鍵事件通常指僅供系統使用的保留按鍵,如HOME鍵、BACK鍵、撥號鍵、掛斷鍵、音量鍵等
$ adb shell monkey --pct-appswtich <percent>
--pct-appswitch:後面接應用啟動事件百分比,應用啟動事件(activity launches)即打開應用,通過調用startActivity()方法最大限度地開啟該package下的所有應用
$ adb shell monkey --pct-anyevent <percent>
--pct-anyevent:後面接其他類型事件百分比,其他類型事件指上文中未涉及的所有其他事件,如keypress、不常用的button等
2.3 約束類命令
約束類命令可以讓隨機事件運行的範圍限制在某幾個包或類中。
$ adb shell monkey -p <allowed-package-name> <event-count>
-p:後面接一個或多個包名,如果不指定任何包,monkey將允許系統啟動全部包裏的Activity。每個-p對應一個包,指定多個包時每個包名前都需要加上-p
如:$ adb shell monkey -p com.agent.tao 1000 運行com.agent.tao 包裏的Activity並發送1000個隨機事件
$ adb shell monkey -c <main-category> <event-count>
-c:後面接一個或多個類別名,monkey將只允許系統啟動這些類別中某個類別列出的Activity,如果不指定任何類別,monkey將選擇Intent.CATEGORY_LAUNCHER和Intent.CATEGORY_monkey裏的Activity
每個-c對應一個類別,指定多個類別時每個類別名前面都需要加上-c
如:$ adb shell monkey -c Intent.CATEGORY_LAUNCHER 1000
運行Inter.CATEGORY_LAUNCHER類別的Activity並發送1000個隨機事件
2.4 調試類命令
通過調試類命令可以對monkey進行簡單的調試,這樣可以快速定位monkey運行中的問題
$ adb shell monkey --dbg-no-events <event-count>
--dbg-no-events:設置此項後,monkey將進行初始啟動,進入到某個測試Activity中不會進一步生成事件,可以監視應用程序所調用的包之間的轉換,為了更好的跟蹤,一般該項
會與-v(日誌)、-p<allowed-package-name> (包約束) 和 --throttle<milliseconds> (延遲)等聯合使用
$ adb shell monkey --hprof <event-count>
--hprof:設置此項後,將在monkey事件序列前後立即生成profilfing report,將在data/misc中生成5MB左右大小的文件
$ adb shell monkey --ignore-crashes <event-count>
--ignore-crashes:設置此項後,當應用程序崩潰或發生失控異常時,monkey將繼續運行直到計數完成。如果不設置此項,monkey遇到上述崩潰或異常將停止運行。
$ adb shell monkey --ignore-timeouts <event-count>
--ignore-timeouts:設置此項後,當應用程序發生任何超時錯誤(如ANR,即Application Not Responding)時,monkey將繼續運行直到計數完成。如果不設置此項,monkey
遇到此類超時將停止運行
$ adb shell monkey --kill-process-after-error <event-count>
--kill-process-after-error:設置此項後,當monkey因為應用程序發生錯誤而停止時,將會通知系統停止發生錯誤的進程。如果不設置此項,monkey停止時發生錯誤的應用程度將
繼續處於運行狀態。
$ adb shell monkey --ignore-security-exceptions <event-count>
--ignore-security-exceptions:設置此項後,當應用程序發生任何權限錯誤(如啟動一個需要某些權限的Activity)時,monkey將繼續運行直到計數完成。如果不設置此項,
monkey遇到此類權限錯誤將停止運行。
$ adb shell monkey --monitor-native-crashes <event-count>
--monitor-native-crashes:設置此項後,monkey運行時native code的崩潰事件將被監視並報告。如果不設置此選項,將不會監視此類事件。
$ adb shell monkey --wait-dbg <event-count>
--wait-dbg:在設置此項後,將暫停執行中的monkey,直到有調試器與它連接。
結果檢查與分析
測試結束後,需要將手機連接PC,拷貝以下文件:
- info.txt:此文件在手機上的SDCARD中,主要記錄了MONKEY測試時發送的各種事件,如觸摸事件的位置等等。
- error.txt:此文件在手機上的SDCARD中,主要記錄了MONKEY測試時產生的一些ANR、強制關閉等異常。
- LOG文件:此文件在手機上的LOG文件夾中中,主要主要記錄程序對MONKEY測試時的響應情況。
我們需要對這3個文件進行分析整理,以便提交開發人員處理。
(1)檢查測試是否完成
通過info.txt文件,可以查看Monkey是否執行成功。如下圖
(2)結果分析整理
我們目前執行Monkey測試的目的是為了檢查是否有內存泄露,而這類問題主要是通過Log文件來體現的。
Error文件也記錄了部分異常,考慮到這部分文件格式已經很規範,因此不需要再次整理。
Log文件記錄了所有信息,因此我們需要進行初步分析整理後再提交研發,以減少研發工作量。
Monkey測試後在Mobilelog文件中會產生多個main_log文件,裏面含有詳細的log執行記錄。通過main_log文件,我們可以查看可能存在內存泄露代碼所在具體位置。是否該行代碼存在泄露需要開發人員進一步驗證。我們只提供可能存在代碼泄露的信息。
含有mian_log的文件都需要進行查看。搜索關鍵字“leak”,在搜索結果中,查看與Ideafreiend相關的代碼。如下圖:
註:com.lenovo.ideafriend:Ideafriend包名;CursorLeakDetecter: 遊標泄露檢查器
1. 程序無響應的問題: 在日誌中搜索 “ANR”
2. 崩潰問題:在日誌中搜索 “Exception” (如果出現空指針, NullPointerException) 肯定是有bug
monkey 命令詳解