MonkeyScript的簡單使用
一、 什么是MonkeyScript
MS 是官方提供的,除了像猴子一樣隨機亂點之外,還可以通過編寫腳本的形式,完成一系列固定的操作。MS 提供一整套完善的 API 來進行支持,主要還是基於坐標點的操作,包含常用的:點擊、長按、輸入、等待等操作。
二、 MonkeyScript的使用
- 編寫MonkeyScript的測試腳本。
MS腳本只要是文本即可,不關心后綴是什么,所以編寫時不要添加后綴,保存文本格式即可。
MS 腳本雖然有一些指定的 API ,但是也有一些固定的腳本頭,需要寫在腳本的最前面。
type=user
count = 1
speed = 1.0
start data >>
在腳本中,腳本頭是一直不變動的,為了避免寫錯,可以直接復制粘貼最保險。在 start data>> 之后就可以正式開始編寫 monkey 腳本了,在腳本中,使用 #
號,對單行進行注釋。
MonkeyScript是需要指定Activity(當前app展示的界面)的,獲取當前指定界面Activity名稱的指令為adb shell dumpsys activity | grep mFocused。
下面以測試登錄功能為例:
LaunchActivity(Activity)
UserWait(1000)
DispatchPointer(0,0,0,303,312,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,303,312,0,0,0,0,0,0,0)
UserWait(1000)
DispatchString(1234566)
UserWait(100)
//輸入密碼
DispatchPointer(0,0,0,345,393,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,345,393,0,0,0,0,0,0,0)
UserWait(100)
DispatchString(1234567)
UserWait(1000)
//點擊空白處讓鍵盤消失
DispatchPointer(0,0,0,100,100,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,100,100,0,0,0,0,0,0,0)
UserWait(1000)
//點擊登錄按鈕
DispatchPointer(0,0,0,361,507,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,361,507,0,0,0,0,0,0,0)
UserWait(3000)
腳本解釋:
首先啟動你要測試的界面,此處為登錄界面,登錄界面有三個控件,用戶名的textField,密碼的textField,和登錄按鈕。
LaunchActivity()
作用為來到登錄界面
UserWait(1000)
等待1秒以后執行下一個操作
DispatchPointer(0,0,0,303,312,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,303,312,0,0,0,0,0,0,0)
DispatchPointer點擊用戶名的textField,只需關注3,4,5這三個參數即可,第三個參數為0表示點擊了textField ,為1表示松開了textField,4,5兩個參數分別為用戶名textField 的x,y坐標。
DispatchString(123456)
在用戶名的textField中輸入123456用戶名
按照上面的操作在密碼的textField輸入密碼,點擊登錄按鈕,整改登錄測試就完成了,如果需要繼續測試登錄后的界面則需要從新啟動新的Activity。
//登錄成功后來到首頁點擊發布作業功能(具體什么功能和第4,5個參數設置的值有關)
LaunchActivity(Activity)
UserWait(1000)
DispatchPointer(0,0,0,650,182,0,0,0,0,0,0,0)
DispatchPointer(0,0,1,650,182,0,0,0,0,0,0,0)
UserWait(1000)
Drag(500,1500,500,500,12)
#向上滑動
將寫好的腳本保存到本地。
2. Monkey 啟動 MonkeyScript 的命令如下:
adb shell monkey -f <MonkeyScript> <EventCount>
<MonkeyScript>指你編寫的MonkeyScript腳本,
<EventCount>指Monkey事件,例如執行次數,日志詳情等。
具體指令:
- adb shell mkdir /sdcard/script 在設備上創建script文件夾用於存放腳本
- 將本地腳本文件push到設備中上面創建的文件夾中。例如adb push /Users/userName/Desktop/testLogin空格/sdcard/script,/Users/userName/Desktop/testLogin就是你腳本在本地的存放路徑。
- 執行adb shell monkey -f /sdcard/script/你的腳本名稱 –v –v 10 >C:\monkey.txt即可,>C:\monkey.txt為日志輸出路徑。
其他簡介
LaunchActivity(pkg_name, cl_name):啟動應用的Activity。參數:包名和啟動的Activity。
Tap(x, y, tapDuration): 模擬一次手指單擊事件。參數:x,y為控件坐標,tapDuration為點擊的持續時間,此參數可省略。
DispatchPress(keyName): 按鍵。參數: keycode。 詳細的Android Keycode列表: http://blog.csdn.net/feizhixuan46789/article/details/16801429
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): 結束獲取幀率。