自定義腳本較爲雞肋,用的很少,依賴於座標點點擊,更換手機或者模擬器就可能無法運行。
常規Monkey測試執行的是隨機的事件流,但如果只是想讓Monkey測試某個特定場景這時候就需要用到自定義腳本了,Monkey支持執行用戶自定義腳本的測試,用戶只需要按照Monkey腳本的規範編寫好腳本,存放到手機上,啓動Monkey通過-f 參數調用腳本即可。
獲取元素座標點位置
Monkey腳本只能通過座標的方式來定位點擊和移動事件的屏幕位置,這裏就需要提前獲取座標信息。獲取座標信息的方法很多,最簡單的方法就是打開手機中的開發人員選項,打開“顯示指針位置”。隨後,在屏幕上的每次操作,在導航欄上都會顯示座標信息。
Monkey腳本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): 結束獲取幀率。
Monkey腳本格式
Monkey腳本主要包含兩部分,一部分是頭文件信息,一部分是具體的monkey命令。
type = raw events
count = 1
speed = 1.0
//下面爲monkey命令
start data >>
具體的monkey腳本內容
例子:
#頭文件信息 注意“=”兩邊預留空格
type = raw events
count = 1
speed = 1.0
#啓動測試
start data >>
LaunchActivity(包名,Activity名)
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) #點擊登錄按鈕
執行腳本
腳本編寫完成後,傳到手機設備上,然後執行。
adb push 路徑 /sdcard
adb shell monkey -f /sdcard/文件名 -v 1