monkey基本使用

一、monkey啓動步驟

1、連接設備

2、adb shell

3、cd /system/bin

4、輸入monkey

二、關閉monkey

1、adb shell ps 查看進程

2、查出 com.android.commands.monkey 進程ID

3、adb shell kill pid 殺死monkey進程

三、monkey 命令

adb shell monkey [options]  <event-count>

--options 指monkey傳入的參數,不指定則爲無反饋啓動,把事件任意發送到目標環境的全部包中

--<event-count> 指隨機發送時間數。如輸入100就執行100個隨機事件。

四、操作事件

1、觸摸事件

按下擡起的操作,可通過--pct--touch 配置事件百分比(是由一組ACTION_DOWN和ACTION_UP)組成

2、手勢事件

指按下、移動、擡起、直線滑動的操作。通過--pct--motion配置百分比(由ACTION_DOWN和ACTION_MOVE和ACTION_UP組成)

3、二指縮放事件

通過--pct--pinchzoom配置,

4、軌跡事件

由一個或多個隨機移動組成,通過--pct-tracball

5、旋轉屏幕

通過--pct-rotation配置百分比

6、基本導航事件

現在基本沒有

7、主要導航事件

主要是中間鍵、back、菜單按鍵。通過--pct-majornav配置

8、系統按鍵事件

如home、back、音量調節等,通過--pct-syskeys配置

9、啓動activity事件

手機開啓一個activity。隨機執行一個startactivity()方法

10、鍵盤事件

通過--pct-flip配置

五、monkey 參數

1、常規參數

monkey -h 幫助類參數

adb shell monkey -v <event-count> ;  -v打印出日誌。每個-v增加反饋信息級別,-v越多越詳細,最多三個

2、事件類參數

adb shell monkey -f /mnt/sdcard/test1  執行腳本文件

adb shell monkey -s 666 100  ;   -s可以重複執行之前的隨機操作。每次隨機事件默認生成一個seed

adb shell monkey --throttle 3000 5;   --throttle 每個指令之間增加間隔時間

adb shell monkey -v -v --pct-touch 100 200;   調整觸摸事件百分比等

六、約束類參數

1、包約束 (只訪問包裏的activity)

adb shell monkey -p com.tal.kaoyan 500

2、activity約束

adb shell monkey -c Intent.CATEGORY_LAUNCHER 1000

七、調試類參數

1、程序崩潰侯繼續發送事件

adb shell monkey --ignore-crashes <event-count>

2、超時錯誤繼續發送事件

adb shell monkey --ignore-timeouts

3、應用程序權限錯誤發生後繼續發送事件

adb shell monkey --ignore-security-exceptions

 

七、案例

1、測試是指定應用,因此需要使用-p指定被測app包名:com.tal.kaoyan

2、這個測試的目的是希望模擬用戶操作,因此需要讓Monkey執行的事件儘可能地接近用戶的常規操作,這樣纔可以最大限度地發現用戶使用過程中可能出現的問題。因此需要對Monkey執行的事件百分比做一些調整:

觸摸事件和手勢事件是用戶最常見的操作,所以通過--pct-touch和--pct-motion將這兩個事件的佔比調整到40%與25%;目標應用包含了多個Activity,爲了能覆蓋大部分的Activity,所以通過--pct-appswitch將Activity切換的事件佔比調整到10%;被測應用在測試中出現過不少橫豎屏之間切換的問題,這個場景也必須關注,因此通過--pct-rotation把橫豎屏切換事件調整到10%。

3、使用-s參數來指定命令執行的seed值 Monkey會根據seed值來生成對應事件流,同一個seed生成的事件流是完全相同的。這裏指定了seed值,是爲了測試發現問題時,便於進行問題復現。

4、使用--throttle參數來控制Monkey每個操作之間的時間間隔 指定操作之間的時間間隔,一方面是希望能更接近用戶的操作場景,正常用戶操作都會有一定的時間間隔;另一方面也是不希望因爲過於頻繁的操作而導致系統崩潰,尤其是在比較低端的手機上執行測試時。因此通過--throttle設置Monkey每個操作固定延遲0.4秒。

5、使用--ignore-crashs和--ignore-timeouts參數使Monkey遇到意外時能繼續執行 在執行Monkey測試時,會因爲應用的崩潰或沒有響應而意外終止,所以需要在命令中增加限制參數--ignore-crash和--ignore-timeouts,讓Monkey在遇到崩潰或沒有響應的時候,能在日誌中記錄相關信息,並繼續執行後續的測試。

6、使用-v指定log的詳細級別 Monkey的日誌輸出有3個級別:日誌的級別越高,其詳細程度也越高。爲了方便問題的定位,這裏將日誌設爲 -v -v.

adb shell monkey -p com.tal.kaoyan
--pct-touch 40 --pct-motion 25 
--pct-appswitch 10
--pct-rotation 5
-s 1666 --throttle 400
--ignore-crashes
--ignore-timeouts
-v -v  200

 

八、monkey腳本穩定性測試

按照規範寫好腳本,放在手機裏,通過monkey -f調用腳本

1、腳本api:

LaunchActivity(pkg_name, cl_name):啓動應用的Activity。參數:包名和啓動的Activity。

Tap(x, y, tapDuration): 模擬一次手指單擊事件。參數:x,y爲控件座標,tapDuration爲點擊的持續時間,此參數可省略。

UserWait(sleepTime): 休眠一段時間

DispatchPress(keyName): 按鍵。參數: keycode。 RotateScreen(rotationDegree, persist): 旋轉屏幕。 參數:rotationDegree爲旋轉角度, e.g. 1代表90度;persist表示旋轉之後是否固定,0表示旋轉後恢復,非0則表示固定不變。

DispatchString(input): 輸入字符串。

DispatchFlip(true/false): 打開或者關閉軟鍵盤。

PressAndHold(x, y, pressDuration): 模擬長按事件。

Drag(xStart, yStart, xEnd, yEnd, stepCount): 用於模擬一個拖拽操作。

PinchZoom(x1Start, y1Start, x1End, y1End, x2Start, y2Start, x2End, y2End, stepCount): 模擬縮放手勢。

LongPress(): 長按2秒。

DeviceWakeUp(): 喚醒屏幕。

PowerLog(power_log_type, test_case_status): 模擬電池電量信息。

WriteLog(): 將電池信息寫入sd卡。

RunCmd(cmd): 運行shell命令。

DispatchPointer(downtime,eventTime,action,x,yxpressure,size,metastate,xPrecision,yPrecision,device,edgeFlags): 向指定位置,發送單個手勢。

DispatchPointer(downtime,eventTime,action,x,yxpressure,size,metastate,xPrecision,yPrecision,device,edgeFilags): 發送按鍵消息。

LaunchInstrumentation(test_name,runner_name): 運行一個instrumentation測試用例。

DispatchTrackball: 模擬發送軌跡球事件。

ProfileWait: 等待5秒。

StartCaptureFramerate(): 獲取幀率。

EndCaptureFramerate(input): 結束獲取幀率。

2、腳本格式

Monkey腳本主要包含兩部分,一部分是頭文件信息,一部分是具體的monkey命令。
type = raw events  
count = 1  
speed = 1.0  
//下面爲monkey命令  
start data >>   
具體的monkey腳本內容  

3、編寫腳本

#頭文件信息

type = raw events 

count = 1

speed = 1.0

#啓動測試
start data >>

LaunchActivity(com.tal.kaoyan,com.tal.kaoyan.ui.activity.SplashActivity)
UserWait(2000)

Tap(624,900,1000) #點擊取消升級
UserWait(2000)

Tap(806,64,1000) #點擊跳過
UserWait(2000)

Tap(217,378,1000) #點擊用戶名輸入框
DispatchString(zxw1234)
UserWait(2000)

Tap(197,461,1000) #點擊密碼輸入框
DispatchString(zxw123456)
UserWait(2000)

Tap(343,637,1000) #點擊登錄按鈕

4、執行腳本

adb push C:\Users\Shuqing\Desktop\kyb1.txt /sdcard

adb shell monkey -f /sdcard/kyb1.txt -v 1

5、注意事項

頭文件代碼書寫注意“=”兩邊預留空格,否則會出現如下報錯。

 

九、日誌管理

1、日誌保存方式

保存PC中

保存手機上

標準流和錯誤流分開保存

2、保存pc中

adb shell monkey -v -v 100 >d:\monkeylog.txt

3、保存在手機上

adb shell

monkey -v 100 >/sdcard/monkeylog.log

4、正常日誌和error日誌分開保存

adb shell monkey -v 100 1>d:\monkey.log  2>d:\error.log

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章