Android-Monkey 壓力測試
Adnroid-UI Automator Viewer 的使用
Adnroid-Monkey Script 壓力測試(一)
Adnroid-Monkey Script 壓力測試(二)
Android-MonkeyRunner 壓力測試(一)
Android-MonkeyRunner 壓力測試(二)
Android-MonkeyRunner API 參考
Android-Monkey 源代碼參考
1. Monkey Script 介紹
Monkey Script 是用 Monkey 來進行壓力測試時執(zhí)行特定操作時的命令(函數(shù))集合,它只能通過屏幕坐標的方式執(zhí)行特定事件,如:點擊、長按、拖動等。
如果它要對屏幕上的某個 View 執(zhí)行點擊事件,就必須知道該 View 在手機屏幕上的坐標。
因為使用 Monkey 對 App 進行壓力測試時,Monkey 的操作是隨機的。
Monkey Script 可以使 Monkey 執(zhí)行特定的操作對 App 進行壓力測試。
如果要執(zhí)行更高級的壓力測試操作,如:截屏、彈窗、安裝Apk等,就要用到功能更加強大的 MonkeyRunner。
手機屏幕上View坐標獲取工具(UI Automator Viewer) 它在 Android ADK 的 tools\bin 目錄下。
UI Automator Viewer 參考: http://www.itdecent.cn/p/b2890c631ec5
MonkeyRunner 參考: https://developer.android.google.cn/studio/test/monkeyrunner?hl=zh_cn
2. Monkey Script API
1. 啟動應用 LaunchActivity
LaunchActivity(String packageName,String activityName)
參數(shù):
- packageName: 程序的包名
- activityName: 要啟動的 Activity,必須是完整的包名加類名
注意:LaunchActivity() 函數(shù)啟動的 Activity 需要在 AndroidManifest 文件中配置 Activity 的 exported 屬性為 true。
2. 等待事件 UserWait
UserWait(long sleeptime)
參數(shù):
- sleeptime: 等待的時間,單位為毫秒
3. 輸入字符串 DispatchString
DispatchString(String text)
參數(shù):
- text: 要輸入的字符串
4. 點擊按鍵 DispatchPress
DispatchPress(int keyCode)
參數(shù):
- keyCode: 按鍵的值,參考 android.view.KeyEvent 類
5. 執(zhí)行 shell 命令 RunCmd
RunCmd(String cmd)
參數(shù):
- cmd: 要執(zhí)行的 shell 命令
6. 打開或關閉鍵盤 DispatchFlip
DispatchFlip(boolean keyboardOpen)
參數(shù):
- keyboardOpen: true 打開,false 關閉
7. 點擊事件 DispatchPointer
DispatchPointer(long downtime,long eventtide,int action,float x,float y,
float pressure,float size,int metastate,float xprecision,
float yprecision,int device,int edgeflags)
參數(shù):
- downtime: 指按鍵最初被按下的時間
- eventtide: 指事件發(fā)生的時間
- action: 指具體操作的動作,如按下(0 代表按下,1 代表抬起)
- x, y: 指點擊的 X 和 Y 的坐標
- pressure: 壓力事件的大小(0~1)
- size: 指觸摸的記事值(0~1)
- metastate: 指當前按下mate鍵的標識
- xprecision,yprecision: 指x和y坐標的精確值
- device: 事件的來源(0~X)
- edgeflags: 指超出屏幕的范圍
8. 軌跡球事件 DispatchTrackball
DispatchTrackball(long downtime,long eventtide,int action,float x,float y,
float pressure,float size,int metastate,float xprecision,
float yprecision,int device,int edgeflags)
- 參數(shù)和 DispatchPointer 一樣
9. 拖動 Drag
Drag(float xStart,float yStart, float xEnd, float yEnd,int stepCount)
參數(shù):
- xStart: 事件開始時的 X 坐標
- yStart: 事件開始時的 Y 坐標
- xEnd: 事件結束時的 X 坐標
- yEnd: 事件結束時的 Y 坐標
- stepCount: 拖動事件它由多個大大小小的事件組成,用來指定它是由多少個小事件組成的,值越大,越連貫
10. 雙指縮放 PinchZoom
PinchZoom(float pt1xStart,float pt1yStart,float pt1xEnd,float pt1yEnd,
float pt2xStart,float pt2yStart,float pt2xEnd,float pt2yEnd,int stepCount)
參數(shù):
- pt1xStart: 第一個手指開始時的 X 坐標
- pt1yStart: 第一個手指開始時的 Y 坐標
- pt1xEnd: 第一個手指結束時的 X 坐標
- pt1yEnd: 第一個手指結束時的 Y 坐標
- pt2xStart: 第二個手指開始時的 X 坐標
- pt2yStart: 第二個手指開始時的 Y 坐標
- pt2xEnd: 第二個手指結束時的 X 坐標
- pt2yEnd: 第二個手指開始時的 X 坐標
- stepCount: 縮放次數(shù)
11. 發(fā)送按鍵消息 DispatchKey
DispatchKey(long downTime,long eventTime,int action,int keyCode,
int repeat,int metaState,int device,int scancode)
參數(shù):
- downTime: 指按鍵最初被按下的時間
- eventTime:按鍵事件發(fā)生時間
- action: 指具體操作的動作,0 表示按下,1 表示抬起
- keyCode: 按鍵的值,參考 android.view.KeyEvent 類
- repeat: 按按鍵的次數(shù)
- metaState: 指當前按下mate鍵的標識
- device: 事件的來源(0~X)
- scancode: 事件的原始設備掃描代碼
12. 旋轉屏幕 RotateScreen
RotateScreen(int rotationDegree,int persist)
參數(shù):
- rotationDegree:旋轉的角度,只支持 0,90,180,270
- persist: 是否保持旋轉前的狀態(tài),0 不保持,1 保持
13. 長按事件 LongPress
LongPress()
- 標準長按為 2 秒,沒有參數(shù),直接調用。
14. 長按事件 PressAndHold
PressAndHold(float x,float y,long pressDuration)
參數(shù):
- x: 指長按的 X 坐標
- y: 指長按的 Y 坐標
- pressDuration:長按的持續(xù)時間,單位毫秒
PressAndHold 用于模擬一個長按事件,和 LongPress 類似,但它可以指定長按坐標和時長。
15. 手指單擊事件 Tap
Tap(float x,float y,long tapDuration)
參數(shù):
- x: 指單擊的 X 坐標
- y: 指單擊的 Y 坐標
- tapDuration :單擊的持續(xù)時間,可選參數(shù),單位毫秒
16. 喚醒設備并解鎖 DeviceWakeUp
DeviceWakeUp()
- DeviceWakeUp 命令可以喚醒設備并進行解鎖。沒有參數(shù),直接調用。當然需要的是一個無鎖屏密碼的設備才可以,有數(shù)字或圖形鎖屏密碼,都會導致失敗。
17. 等待 5 秒 ProfileWait
ProfileWait()
- ProfileWait 命令和 UserWait 類似,但是它已經設定好等待的時長,就是 5s ,沒有參數(shù),直接調用。