在軟件測試過程中,我們最能想到的就是按照功能常規流程操作步驟執行,但有很多問題是藏匿在長時間非常規測試操作中。介紹下這種類型測試的monkey測試。
1.什么是monkey測試?
Monkey直譯為‘猴子’,猴子和測試人員本質區別就是猴子不知道業務邏輯,猴子可以理解為完全不懂業務知識也沒有測試相關經驗的的人員,在對于同樣一個項目而言,monkey測試就是對項目各種無目的事件操作。
2.Monkey測試原理
monkey向系統發送偽隨機的用戶事件流,實現對正在開發的應用程序進行壓力測試
3.Monkey運行原理
monkey測試需要借助monkey工具,monkey工具是Android自帶的一個工具,使用java語言編寫的,jar包路徑:/system/framework/monkey.jar
如果要啟動monkey.jar則需要運行android中的名為“monkey”的Shell腳本,shell腳本存放路徑:/system/bin/monkey
Monkey的shell腳本需要通過adb命令來執行,即通過cmd窗口中,adb shell monkey +命令參數 來進行monkey測試
4.monkey測試參數說明
a.基礎參數
1.-p:指定要測試的包名
說明:如何查看應用的包名?
手機上打開目標應用:
DOS框中輸入:adb shell dumpsys window|findstr mCurrentFocus
2.-v :指定輸出日志的級別,monkey輸出日志有3個級別,通過-v參數來指定:
-v一級別 僅提供啟動提示、測試完成和最終結果等少量信息
例:adb shell monkey -p com.tal.kaoyan -v 100
–v –v二級別提供較為詳細的日志,包括每個發送到Activity的事件信息
例:adb shell monkey -p com.tal.kaoyan -v -v 100
–v –v –v三級別提供最詳細的日志
例:adb shell monkey -p com.tal.kaoyan -v -v -v 100
3.-s:用于指定偽隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的
注:seed值為monkey日志中的信息
4.--throttle <毫秒>事件之間插入固定延遲
b.事件類型參數
Monkey的事件類型總共有11種:
0:點擊事件,即參數--pct-touch
1:滑動事件,即參數--pct-motion
2:縮放事件,即參數--pct-pinchzoom
3:軌跡球事件,即參數--pct-trackball
4:屏幕旋轉事件,即參數--pct-rotation
5:基本導航事件,即參數--pct-nav
6:主要導航事件,即參數--pct-majornav
7:系統按鍵事件,即參數--pct-syskeys
8:Activity啟動事件,即參數--pct-appswitch
9:鍵盤喚出隱藏事件,即參數--pct-flip
10:其他事件,即參數--pct-anyevent
下圖是執行monkey測試日志中顯示發送每類事件的默認比例,可設定某個事件類型的占比
c.調試參數
Monkey測試過程中需要長時間的對應用發送事件測試,很可能測試時間不久就因為碰到問題而崩潰,此時測試停止,而達不到我們長期測試的目的,我們需要通過調試參數來讓測試繼續執行就通過調試參數告訴monkey在遇到問題的時候該怎么處理
(1)--ignore-crashes:用于指定當應用程序崩潰時Monkey依然運行
(2)--ignore-timeouts:應用程序發生任何超時錯誤(如“Application Not responding”對話框)Monkey依然運行
(3)--ignore-security-exceptions 指定應用程序發生許可錯誤時(如證書許可,網絡許可等),monkey依然運行
5.Monkey測試命令
adb shell monkey –p com.tal.kaoyan --throttle 100 -s 1606780631055 --pct-touch 70 --ignore-crashes --ignore-timeouts --ignore-security-exception -v –v –v 864000(發送事件的次數) > d:emp\monkey.log
注:
(1)monkey的參數沒有順序要求,但是隨機事件數是一定要放在后的
(1)想要monkey運行24小時,每100毫秒發送一個事件,則需要發送的時間次數為:24*60*60*1000/100=864000(次)
6.Monkey測試能發現的問題:
monkey日志文件中搜索關鍵字:
(1)程序無響應,ANR問題:在日志中搜索“ANR” application not responding
(2)崩潰問題:在日志中搜索“CRASH”
(3)其他問題:在日志中搜索”Exception”