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