Monkey 是Android SDK提供的一個命令行工具,是一個黑盒壓力測試工具,采用隨機算法,對被測應用隨機發送偽隨機的用戶事件流,如點擊,拖拽,滑動,輸入等,來確定應用是否會發生異常,並且會產生日志來進行分析,但是測試數據測試事件都是隨機的,有一定局限性。
Monkey 適合作為壓力或者穩定性測試工具來測試應用的崩潰率、穩定性。但是可以通過二次開發來進行業務流程控制或一定程度上控制測試覆蓋。通過多次並且不同設定下的Monkey測試才算是一個穩定性足夠的程序。
monkey 命令介紹
adb shell monkey -help
1、基礎參數解析
-p 指定要進行monkey測試的包,如果不使用參數,則會隨機選擇應用進行測試。
指定一個包:adb shell monkey -p com.fenbi.android.solar 1000
指定多個包:adb shell monkey -p com.fenbi.android.solar -p com.tao.bao 1000
-c 指定activity的category類別
如果用此參數指定了一個或多個類別,則Monkey將只允許系統啟動被這些類別中的某個類別列出的Activity。
如果不指定任何類別,則Monkey將選擇下列類別中列出的Activity:Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKRY。
如果要指定多個類別,則需要使用多個 -c選項,每個 -c選項只能用於一個類別。
-v 指定日志級別
level1(-v):缺省值,僅提供啟動提示、測試完成和最終結果等少量信息
level2(-v -v):提供較為詳細的日志,包括每個發送到Activity的事件信息
level3( -v -v -v):最詳細的日志,包括了測試中選中/未選中的Activity信息
adb shell monkey -p com.shjt.map -v 100 adb shell monkey -p com.shjt.map -v -v 100 adb shell monkey -p com.shjt.map -v -v -v 100
-s 用於指定偽隨機數生成器的seed值。如果seed相同,則兩次Monkey測試所產生的事件序列也相同的(不指定就會隨機生成)。
(所以一般在測試時要記錄seed值,以防出現無響應和crash,不容易驗證。)
可以通過-s參數復現問題,如:
monkey測試1:adb shell monkey -p com.shjt.map –s 10 100
monkey測試2:adb shell monkey -p com.shjt.map –s 10 100
--throttle<毫秒>:用於設置每個事件結束后延遲多少時間再繼續下一個事件,降低cpu壓力;如果不設置,事件與事件之間將不會延遲,事件將會盡快生成;一般設置300ms。
adb shell monkey -p com.shjt.map --throttle 300 100
2、調試參數解析
--ignore-crashes:用於指定當應用程序崩潰(Crash)時,Monkey是否停止運行。如果使用此參數,即使應用程序崩潰,monkey依然會發送事件,直到事件計數完成。
--ignore-timeouts :用於指定當應用程序發生無響應(ANR)錯誤時,Monkey是否停止運行。如果使用此參數,即使應用程序發生ANR錯誤,Monkey依然會發送事件,直到事件計數完成。
--ignore-native-crashes:如果使用此參數,則忽略native層代碼的崩潰。
--ignore-security-exceptions :用於指定當應用程序發生許可錯誤時(如證書許可,網絡許可等),Monkey是否停止運行。如果使用此參數,即使應用程序發生許可錯誤,Monkey依然會發送事件,直到事件計數完成。
--monitor-native-crashes:用於指定是否監視並報告native層發送的崩潰代碼。
--kill-procress-after-error:用於指定當應用程序發生錯誤時,是否停止其運行。如果指定此參數,當應用程序發生錯誤時,應用程序停止運行並保持在當前狀態(注意:應用程序僅是靜止在發生錯誤時的狀態,系統並不會結束該應用程序的進程)。
--hprof:該選項設置后,將會在monkey事件序列前后立刻生成report,大小為大於5MB,存儲在/data/misc。
3、事件類型
monkey在發送偽隨機事件時,是有不同的類型的。默認隨機分配比例,也可以指定其百分比。如果不設置,則--pct-anyevent總量為100%,也就是純隨機事件;可以單參數設置百分比,也可以多參數設置百分比,但百分比的總量不能大於100%。
# 單個參數設置百分比 adb shell monkey -p com.huomaotv.com --pct-appswitch 20 1000 # 多個參數設置百分比 adb shell monkey -p com.huomaotv.mobile --pct-appswitch 20 --pct-rotation 20 --pct-touch 30 --pct-motion 20 1000
在實際工作中,如果簡單跑一下穩定性沒有必要修改這些參數。如果想測試更精確一些,讓 monkey 測試過程中減少一些無效的事件,可以根據項目 App 的特性調整事件的比例。
比如常見的應用中觸摸和滑動的操作肯定是最頻繁的,那么相對可以提高這兩種事件的比例;或者如游戲和視頻類的 App,會存在橫豎屏切換的操作,就適當增加屏幕旋轉事件的比例。
0:--pct-touch <percent>:設置觸摸事件的百分比。觸摸事件(down-up)是指在屏幕上的一個單獨位置的一次點擊/抬起的事件。
1:--pct-motion <percent>:設置滑屏的百分比設置。手勢事件是由一個在屏幕某處的按下事件(down)、一系列的偽隨機移動、一個抬起事件(up)組成)即一個滑動操作,但是是直線的,不能拐彎。
3:--pct-trackball <percent>:設置軌跡球事件百分比。軌跡球事件包括一個或多個隨機移動,有時還伴有點擊。(不常使用參數,但滾動球事件中包含曲線滑動事件,在被測程序需要曲線滑動時可以選用此參數。)
4:--pct-rotation:旋轉屏幕。
6:--pct-nav:設置導航按鍵事件的百分比。導航事件由方向輸入設備的上下左右按鍵所觸發的事件組成(不常用參數)。
7:--ptc-majornav:設置主導航事件的百分比。((如中間鍵、取消、確定或菜單引發的圖形接口的動作))。
8:--pct-syskeys:設置系統物理按鍵事件百分比,比如home鍵,音量鍵,返回鍵,撥打電話鍵,掛電話鍵等。
9:--pct-appswitch:調整啟動activity的百分比。在隨機間隔中,執行一個startActivity()方法調用,作為一種最大化的覆蓋安裝包的所有的activity的方法,保證界面的覆蓋情況。
10:--pct-flip:鍵盤翻轉。
11:--ptc-anyevent:設置其它事件百分比,比如按鍵或其他不太常用到的一些事件的百分比(不常用參數)。
將monkey日志輸出到文件:
adb shell monkey -p xxx.xxxx.xxx -v -v 100 > E:\monkeyLog.txt
日志報告分析
可參考:https://www.cnblogs.com/kekouwen/archive/2018/11/21/9995635.html
該博文分別講述了如何初步、詳細分析日志、內存泄漏等問題。
參考:https://www.cnblogs.com/dreamyu/p/11716925.html
參考:https://www.cnblogs.com/smallstone2018/p/10024500.html
參考:https://www.cnblogs.com/yuntimer/p/10779617.html