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