MonkeyScript使用教程


原文地址https://www.cnblogs.com/yizhou-xu/p/8072813.html

原文地址https://www.cnblogs.com/YatHo/p/7205162.html

MonkeyScript的簡單使用

一、 什么是MonkeyScript

MS 是官方提供的,除了像猴子一樣隨機亂點之外,還可以通過編寫腳本的形式,完成一系列固定的操作。MS 提供一整套完善的 API 來進行支持,主要還是基於坐標點的操作,包含常用的:點擊、長按、輸入、等待等操作。

 

二、 MonkeyScript的使用

  1. 編寫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事件,例如執行次數,日志詳情等。

 

具體指令:

  1. adb shell mkdir /sdcard/script 在設備上創建script文件夾用於存放腳本
  2. 將本地腳本文件push到設備中上面創建的文件夾中。例如adb push /Users/userName/Desktop/testLogin空格/sdcard/script,/Users/userName/Desktop/testLogin就是你腳本在本地的存放路徑。
  3. 執行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): 結束獲取幀率。

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

作為移動端測試必須掌握的初級Android穩定性工具:monkey,提到它時,腦海里一般涌現出兩句話:

1.我會用,很簡單

就是一行命令,一回車就開始跑起來了

2.使用問題多,不好用

太隨機,很多操作沒意義 
達到深層頁面的概率極低 
雖然加了各種忽略異常,但是monkey進程還是經常死掉 
無法有針對性(指定頁面or指定操作)的測試 ,等等

帶着這些問題,將更智能的monkey介紹給大家

智能monkey之monkeyscript(一)

解決問題:

有針對性的指定操作進行穩定性測試

需求(參考搜狗搜索APP):

啟動app,搜索1次,退出。重復1萬次

Script:
type=user
count=10
speed=1.0
start data >>
LaunchActivity(com.sogou.activity.src, com.sogou.search.entry.EntryActivity)
UserWait(3000)
captureDispatchPointer(10,10,0,500,500,1,1,-1,1,1,0,0)
captureDispatchPointer(10,10,1,500,500,1,1,-1,1,1,0,0)
UserWait(500)
captureDispatchString(test)
UserWait(500)
captureDispatchPress(66)
UserWait(3000)
Drag(500,1500,500,500,500)
captureDispatchPress(4)
UserWait(1000)
captureDispatchPress(4)
captureDispatchPress(4)

script逐行解釋:

type=user
count=10
speed=1.0
start data >>
#固定頭部,參數和值均不影響腳本
LaunchActivity(com.sogou.activity.src, com.sogou.search.entry.EntryActivity)
#啟動app,參數1:包名,參數2:主activity名
UserWait(1500)
#等待1500毫秒
captureDispatchPointer(10,10,0,500,500,1,1,-1,1,1,0,0)
#按下坐標500,500(搜索框位置)

captureDispatchPointer(10,10,1,500,500,1,1,-1,1,1,0,0)
#抬起坐標500,500(搜索框位置)

UserWait(500)
#等待500毫秒
captureDispatchString(test)
#在搜索框輸入“test”

captureDispatchPress(66)
#輸入回車進行搜索

UserWait(3000)
#等待3000毫秒
Drag(500,1500,500,500,500)
#上划瀏覽搜索結果頁

captureDispatchPress(4)
#輸入back回退至app首頁

UserWait(500)
等待500毫秒

captureDispatchPress(4)
captureDispatchPress(4)
#雙back退出app
運行:

1.將腳本保存命名(例test_search) 
2.將腳本文件放置測試機中

adb shell mkdir /sdcard/script
#創建腳本文件夾
adb push test_search /sdcard/script
#將腳本文件push到文件夾

3.運行腳本文件1萬次

adb shell monkey -f /sdcard/script/test_search 10000
運行效果:

附件1

Monkeyscript API介紹

#單點事件
DispatchPointer(downTime,eventTime,action,x,y,pressure,size,metaStat,xPrecision,yPrecision,device,edgeFlags)
downTime,//touchdown的時間
eventTime,//touch時間發生的時間                
action,//Action code: either {@link #ACTION_DOWN=0}, {@link #ACTION_UP=1}, or {@link #ACTION_MULTIPLE=2}.  如果時間是0,2,1可以模擬滑屏
x,  //The X coordinate of this event.  
y,  //The Y coordinate of this event.  
pressure, //The current pressure of this event.  The pressure generally ranges from 0 (no pressure at all) to 1 (normal pressure), however values higher than 1 may be generated depending on the calibration of the input device.  

size, //A scaled value of the approximate size of the area being pressed touched with the finger. The actual value in pixels corresponding to the finger touch is normalized with a device specific range of values and scaled to a value between 0 and 1.  

metaStatex //The state of any meta / modifier keys that were in effect when the event was generated.  

xPrecision,  //The precision of the X coordinate being reported.  

yPrecision,  //The precision of the Y coordinate being reported.  

deviceId,  //The id for the device that this event came from.  An id of zero indicates that the event didn't come from a physical device; other numbers are arbitrary and you shouldn't depend on the values.  

edgeFlags,  // A bitfield indicating which edges, if any, where touched by this MotionEvent

example:

DispatchPointer(0,0,0,830,1000,0,0,0,0,0,0,0); touchDown

DispatchPointer(0,0,1,830,1000,0,0,0,0,0,0,0);touchUp

#拖動

Drag(x1,y1,x2,y2,stepCount)

example:

快速下滑:Drag(300,500,300,300,15)
快速上滑:Drag(300,300,300,500,15)
#雙指縮放

PinchZoom(xstart1,ystart1,xstart2,ystart2,xend2,yend2,xend1,yend1,step)

example:

#放大
PinchZoom(400,400,200,300,550,550,700,700,3);
#cmd: shell命令

RunCmd(cmd)

example

RunCmd(monkey -v 1000)
#發送tap事件(一個touchdown和touch up事件),時間長可以模擬長按,時間單位為ms

Tap(x,y,tapDuration)
#啟動喚醒設備

DeviceWakeUp()
#獲取最后一個touch時間的點做長按

LongPress()
#按住duration時長

PressAndHold(x,y,duration)
#屏幕旋轉
RotateScreen(rotationDegree,persist)
// rotationDegree只能支持0,90,180,270
// persist 0/1
// 對指定keycode模擬touch事件(keycode列表見尾部)
DispatchKey(downTime,eventTime,action,code,repeat,metaState,device,scancode)
// 對指定keycode模擬press事件
DispatchPress(KeyCode)
KEYCODE列表

電話鍵

鍵名 描述 鍵值
KEYCODE_CALL 撥號鍵 5
KEYCODE_ENDCALL 掛機鍵 6
KEYCODE_HOME 按鍵Home 3
KEYCODE_MENU 菜單鍵 82
KEYCODE_BACK 返回鍵 4
KEYCODE_SEARCH 搜索鍵 84
KEYCODE_CAMERA 拍照鍵 27
KEYCODE_FOCUS 拍照對焦鍵 80
KEYCODE_POWER 電源鍵 26
KEYCODE_NOTIFICATION 通知鍵 83
KEYCODE_MUTE 話筒靜音鍵 91
KEYCODE_VOLUME_MUTE 揚聲器靜音鍵 164
KEYCODE_VOLUME_UP 音量增加鍵 24
KEYCODE_VOLUME_DOWN 音量減小鍵 25

控制鍵

 

鍵名 描述 鍵值
KEYCODE_ENTER 回車鍵 66
KEYCODE_ESCAPE ESC鍵 111
KEYCODE_DPAD_CENTER 導航鍵 確定鍵 23
KEYCODE_DPAD_UP 導航鍵 向上 19
KEYCODE_DPAD_DOWN 導航鍵 向下 20
KEYCODE_DPAD_LEFT 導航鍵 向左 21
KEYCODE_DPAD_RIGHT 導航鍵 向右 22
KEYCODE_MOVE_HOME 光標移動到開始鍵 122
KEYCODE_MOVE_END 光標移動到末尾鍵 123
KEYCODE_PAGE_UP 向上翻頁鍵 92
KEYCODE_PAGE_DOWN 向下翻頁鍵 93
KEYCODE_DEL 退格鍵 67
KEYCODE_FORWARD_DEL 刪除鍵 112
KEYCODE_INSERT 插入鍵 124
KEYCODE_TAB Tab鍵 61
KEYCODE_NUM_LOCK 小鍵盤鎖 143
KEYCODE_CAPS_LOCK 大寫鎖定鍵 115
KEYCODE_BREAK Break/Pause鍵 121
KEYCODE_SCROLL_LOCK 滾動鎖定鍵 116
KEYCODE_ZOOM_IN 放大鍵 168
KEYCODE_ZOOM_OUT 縮小鍵 169

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM