APP壓力穩定性測試之monkey入門


1、什么是monkey?

Monkey是一個命令行工具,使用安卓調試橋(adb)來運行它,模擬用戶觸摸屏幕、滑動Trackball、按鍵等隨機事件流來對設備上的程序進行壓力測試,檢測程序多久的時間會發生異常,可以根據獲取的log信息進行修復。

注:運行adb服務,需要搭建android sdk的環境,可以參考我另一篇《APP壓力穩定性測試之monkey環境搭建》完成。

 

2、Monkey的一般使用步驟

1.先確認設備(模擬器或者真機)是否連接成功。命令:adb devices,出現設備號則表示連接成功

2.確定待測應用的包名。參考如下

 1)打開待測應用后,輸入命令:adb shell dumpsys activity | find "mFocusedActivity"

  例圖,我開啟騰訊課堂的應用,輸入命令后,得到包名為com.tencent.edu

2)adb shell進入shell界面,通過查看data/data下的程序包,根據關鍵字查找包名

3.執行monkey測試命令:adb shell monkey -p com.tencent.edu -v -v 200

這個命令的意思就是,向騰訊課堂app發送200次隨機事件流操作,且打印日志

 

3、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

 

 

4、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 >>后面是執行的命令。

 

<常見API>

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

 

5、補充小知識:

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問題

 

~~更多問題歡迎大家留言,也歡迎加右上角群號一起討論~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM