一、什麼是monkey?android
Monkey是一個命令行工具,使用安卓調試橋(adb)來運行它,模擬用戶觸摸屏幕、滑動Trackball、按鍵等隨機事件流來對設備上的程序進行壓力測試,檢測程序多久的時間會發生異常,能夠根據獲取的log信息進行修復。shell
注:運行adb服務,須要搭建android sdk的環境,能夠參考我另外一篇《APP壓力穩定性測試之monkey環境搭建》完成。瀏覽器
二、Monkey的通常使用步驟app
1.先確認設備(模擬器或者真機)是否鏈接成功。命令:adb devices,出現設備號則表示鏈接成功dom
2.肯定待測應用的包名。參考以下工具
1)打開待測應用後,輸入命令:adb shell dumpsys activity | find "mFocusedActivity"測試
例圖,我開啓騰訊課堂的應用,輸入命令後,獲得包名爲com.tencent.eduui
2)adb shell進入shell界面,經過查看data/data下的程序包,根據關鍵字查找包名spa
3.執行monkey測試命令:adb shell monkey -p com.tencent.edu -v -v 200命令行
這個命令的意思就是,向騰訊課堂app發送200次隨機事件流操做,且打印日誌
三、Monkey的常見命令
-help 查看monkey用法
命令格式:adb shell monkey [限制命令 參數值][事件名 百分比] 事件次數
-p <allowed-package-name>
用於約束限制,用此參數指定一個或多個包。指定包以後,Monkey將只容許系統啓動指定的APP。若是不指定包,Monkey將容許系統啓動設備中的全部APP。指定多個包,使用多個-p,一個-p後面接一個包名。
例: adb shell monkey -p com.android.browser -p com.tencent.edu -v 100
-v 用於指定反饋信息級別(信息級別就是日誌的詳細程度),總共分3個級別
-v,日誌級別 Level0;
-v -v,日誌級別 Level 1;
-v -v -v,日誌級別 Level 2;
要查看級別最高的日誌,例:adb shell monkey -p com.tencent.edu -v -v -v 100
-s 用於指定僞隨機數生成器的seed值,若是seed相同,則兩次Monkey測試所產生的事件序列也相同的。通常測試過程當中出現崩潰,能夠經過seed值來完成復現。
--throttle <毫秒> 用於指定用戶操做(即事件)間的時延,單位是毫秒;
--randomize-throttle 用這個參數必須與--throttle 綁定使用。用於在事件之間插入隨機延遲,隨機延遲範圍爲0到throttle設置的時間,單位爲毫秒;
例:adb shell monkey -p com.tencent.edu --throttle 500 --randomize-throttle 100
--pkg-whitelist-file 白名單,後面接txt文件,指定白名單參數後只測試白名單的應用程序
--pkg-blacklist-file 黑名單,後面接txt文件,指定黑名單參數後,避開黑名單的應用程序
例:adb shell monkey --pkg-whitelist-file /data/local/tmp/whitelist.txt 100
注:黑白名單命令不能同時使用
Monkey百分比事件
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
例:adb shell monkey -p com.tencent.edu --pct-touch 10 -v -v 100
四、MonkeyScript
MonkeyScript是monkey的腳本語言,是一組能夠被Monkey識別的命令集合,能夠幫咱們完成一系列的被固定的重複性操做。
腳本優點:簡單、快捷、不須要藉助任何工具,只是運行一個腳本文件
腳本缺點:只能簡單實現座標、按鍵等基本操做(根據像素點來進行操做)
<腳本格式>
#頭文件、控制monkey發送消息的參數
type=raw events
count=10
speed=1.0
#如下爲monkey命令
start data >>
LaunchActivity(pkg_name,activity)
DispatchPress(KEYCODE_ENTER)
DispatchPress(KEYCODE_HOME)
---->前三行是腳本頭。count爲腳本中包含的指令數目。speed爲執行速度。
---->start data >>後面是執行的命令。
LaunchActivity(pkg_name, cl_name): 啓動應用的Activity。參數:包名和啓動的Activity。
Tap(x, y, tapDuration): 模擬一次手指單擊事件。參數:x,y爲控件座標,tapDuration爲點擊的持續時間,此參數可省略。
DispatchPress(keyName): 按鍵。注:keyName值能夠百度android keycode列表獲取
RotateScreen(rotationDegree, persist): 旋轉屏幕。 參數:rotationDegree爲旋轉角度, e.g. 1表明90度;persist表示旋轉以後是否固定,0表示旋轉後恢復,非0則表示固定不變。
DispatchFlip(true/false): 打開或者關閉軟鍵盤。
LongPress(): 長按2秒。
PressAndHold(x, y, pressDuration): 模擬長按事件。
DispatchString(input): 輸入字符串。
Drag(xStart, yStart, xEnd, yEnd, stepCount): 用於模擬一個拖拽操做。
PinchZoom(x1Start, y1Start, x1End, y1End, x2Start, y2Start, x2End, y2End, stepCount): 模擬縮放手勢。
UserWait(sleepTime): 休眠一段時間
DeviceWakeUp(): 喚醒屏幕。
ProfileWait: 等待5秒。
---->在android sdk路徑-tools下,使用sdk中的工具hierarchyviewer.bat或者uiautomatorviewer.bat,獲取API方法中控件位置(X,Y軸的座標)。
<腳本舉例>
要求:打開瀏覽器,輸入www.ningmengban.com, 退出瀏覽器。這個步驟進行重複壓力測試。
---->腳本文件browser.txt編寫內容以下:
#頭文件、控制monkey發送消息的參數
type=raw events
count=10
speed=1.0
#如下爲腳本正文
start data >>
#1.打開瀏覽器
LaunchActivity(com.android.browser,com.android.browser.BrowserActivity)
ProfileWait()
#2.清空網址
Tap(223,146)
ProfileWait()
DispatchPress(112)
ProfileWait()
#3.輸入網址
DispatchString(www.ningmengban.com)
ProfileWait()
#4.確認,載入網址
DispatchPress(KEYCODE_ENTER)
ProfileWait()
#5.完成退出瀏覽器
DispatchPress(KEYCODE_HOME)
ProfileWait()
---->將browser.txt文件push到手機中
adb push D:\browser.txt data/local/tmp
D:\browser.txt 爲本地腳本文件路徑及名稱,data/local/tmp爲手機路徑
---->運行腳本
adb shell monkey -f data/local/tmp/browser.txt -v -v 200
五、補充小知識:
1>如何安裝apk?
adb install xxx.apk -----爲了獲取apk的安裝包所在地址,能夠直接把apk拖到cmd的窗口獲取,返回success就說明安裝成功了!
2>如何將本地文件上傳到手機端?
adb push <本機路徑> <手機路徑>
例,將本地的白名單上傳到手機端,adb push F:\whitelist.txt data/local/tmp
3>如何將日誌保存到PC端?
adb shell monkey -v -v -v 1000 > 本機地址
例:adb shell monkey -v -v -v 1000 > d:\monkey.txt
4>日誌查看補充
---->先把日誌輸出到本地
---->注意觀察switch後面的內容,通常錯誤都會顯示在這個後面
---->ANR問題:日誌中搜索ANR關鍵字
---->奔潰問題:在日誌中搜索Exception問題
~~更多問題歡迎你們留言,也歡迎加右上角羣號一塊兒討論~~