閒話少說,先上源碼:
type = raw events
count = 1
speed = 1.0
start data >>
#打開app的包名,啓動的Activity
LaunchActivity(com.android.calculator2,com.android.calculator2.Calculator)
#休眠500ms
UserWait(500)
#點擊計算機按鈕1
Tap(105,989,1000)
UserWait(500)
#點擊計算機按鈕+號
Tap(635,850,1000)
UserWait(500)
#點擊計算機按鈕9
Tap(445,731,1000)
UserWait(500)
#點擊計算機按鈕=號
Tap(617,1071,1000)
UserWait(500)
執行結果截圖:
首先說一下爲什麼要用到自定義腳本:
原因很簡單,monkey測試是隨機的,哪怕是我們儘可能的設置好參數,但是還是無法執行特定的測試場景,如果想讓monkey測試某個特定的場景,一定要用到自定義腳本。
monkey的語法比較特別,跟shell類似,開頭是特定的,並且monkey只能通過座標的方式來定位點擊和移動事件的屏幕位置
特定開頭如下:
type = raw events #腳本的類型
count = 1 #執行腳本次數
speed = 1.0 #執行腳本速率
start data >> #開始monkey的命令
#利用monkey API編寫的自定義流程
趟坑日記一:編寫號的腳本必須放到手機上執行,否則會報錯。
#腳本放到手機中:
adb push 電腦路徑 手機路徑
#腳本執行命令
adb shell -f 腳本路徑 執行次數 (可以附加其他條件)
趟坑日記二:一定要加上執行次數,否則會報錯:
最後附帶monkey的常用API:
LaunchActivity(pkg_name,cl_name):啓動應用的Activity,參數:包名和啓動的應用的Activity
Tap(x,y,tapDuration):模擬一次手指點擊事件,參數:x,y爲控件的座標,tapDuration爲點擊的持續時間
DispatchPress(keyName): 按鍵。
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(): 喚醒屏幕。
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): 結束獲取幀率