一、Monkey腳本編寫
1.Monkey腳本格式
- 腳本優勢:
簡單快捷,不需要接觸任何工具,只需要一個記事本文件
- 腳本缺點:
實現坐標、按鍵等基本操作的相應步驟,順序腳本無邏輯性
-
腳本源碼:
\development\cmds\monkey\src\com\android\commands\monkey\MonkeySourceScrip.java
#頭文件、控制monkey發送消息的參數 type=raw events count=10 speed=1.0 #以下為monkey命令 start data >> DispatchPress (KEYCODE_HOME) DispatchPress (KEYCODE_MENU)
2.Monkey腳本API
1)常用API
API |
說明 |
LaunchActivity(Pkg_name,cl_name) | 啟動應用的Activity |
Tap(x,y,tapDuration) | 模擬一次手指單擊事件 |
DispatchPress(KeyCodeName) | 按鍵 |
RotateScreen(ratationDegree,peresist) |
旋轉屏幕 ratationDegree:四個參數0123分別代表0,90,180,270 peresist:兩個參數^0,0旋轉后固定和旋轉后不固定 |
DispatchFlip(true/false) | 打開或關閉軟鍵盤 |
LongPress() | 長按兩秒 |
PressAndHold(x,t,pressDuration) | 模擬長按事件 |
DispatchString(input) | 輸入字符串 |
Drag(sStart,yStart,xEnd,yEnd.stepCount) | 用於模擬一個拖拽操作 |
PinchZoom(pt1xStart,pt1yStart,pt1xEnd,pt1yEnd,pt2xStart,pt2yStart,pt2xEnd,pt2yEnd,stepCount) | 模擬縮放手勢 |
UserWait(sleepTime) | 讓腳本中斷一段時間 |
DeviceWakeUp() | 喚醒屏幕 |
2)其他API
API |
說明 |
PowerLog(power_log_type,test_case_status) | 模擬電池電量信息 |
WriteLog() | 將電池信息寫入SD卡 |
RunCmd() | 運行shell命令 |
DispatchPointer(downtime,eventTime,action,x,yxpressure,size,metastate,xPrecision,yPrecision,device,edgeFilags) | 向指定位置發送單個手勢 action:0是按下,1是彈起 |
DispatchKey(downTime,eventTime,action,code,repeat,metaStatue,device,scancode) | 發送按鍵消息 |
LaunchInstrumentation(test_name,runner_name) | 運行一個instrumentation測試用例 |
DispatchTrackball | 模擬發送軌跡球事件 |
ProfileWait | 等待5秒 |
StartCaptureFramerate() | 獲取幀率 |
EndCaptureAppFramerate(input) | 結束獲取幀率 |
startCaptureAppFramerate(app) | 獲取指定應用幀率 |
EndCaptureAppFramerate(app,input) | 結束獲取幀率 |
3.Monkey腳本實例
- 打開瀏覽器,輸入www.baidu.com,測試10次
#頭文件、控制monkey發送消息的參數 type=raw events count=10 speed=1.0 #一下為腳本正文 start data >> #1.打開瀏覽器 LaunchActivity(com.android.browser,com.android.browser.BrowserActivity) ProfileWait() #2.清空網址 Tap(223,146) ProfileWait() DispatchPress(112) ProfileWait() #3.輸入網址 DispatchString(www.baidu.com) ProfileWait() #4.確認,載入網址 DispatchPress(KEYCODE_ENTER) ProfileWait() #5.完成退出瀏覽器 DispatchPress(KEYCODE_HOME) ProfileWait() #6.腳本完成后將.txt文件push到手機中,然后使用命令"adb shell monkey -f path/name.txt --throttle 500 -v -v 1"命令調試運行,其中path指的是文件存放路徑,name指的文件名
二、Monkey服務器
1)使用命令”adb shell monkey –port 1080”打開手機端口
2)使用命令”adb forward tcp:1080 tcp:1080”把PC和手機端口進行連接誒
3)使用命令”telnet localhost 1080” 創建通訊
#注意事項:
adb shell monkey --port 1080 adb forward tcp:1080 tcp:1080 //需要重新打開一個cmd窗口 telnet localhost 1080 //windows默認沒有打開telnet,控制面板--程序和功能--打開或關閉windows功能--telnet相關的都勾選好然后重啟電腦
1.monkey服務器命令
- 命令源碼:
\development\cmds\monkey\src\com\android\commands\monkey\MonkeySourceNetwork.java
1)常用API
命令 |
命令格式 |
說明 |
flip | flip open、filp closed | 打開或關閉鍵盤 |
touch | touch [down|up|move] [x] [y] | 模擬手指按下邊界的操作 |
trackball | trackball [dx] [dy] | 發送一個軌跡球操作事件 |
key | Key [down|up] [keycode] | 發送一個按鍵事件 |
sleep | sleep [暫停時間] | 服務器暫停一點時間 |
type | type [String] | 向當前應用發送一個字符串 |
wake | wake | 喚醒設備 |
tap | tap [x] [y] | 發送一個單擊坐標的命令 |
press | press [keycode] | 發送一個按鍵 |
deferreturn | deferrenturn [event] [timepue] [command] | 執行一個命令在指定延時之內等待一個event事件 |
2)查詢API
命令 |
命令格式 |
說明 |
listvar | listvar | 列出可查看的系統變量 |
getvar | getvar [variable name] | 獲取一個系統變量的值 |
listviews | listviews | 列出待測應用里的所有視圖的ID |
getrootview | getrootview | 獲取待測試應用的最上層控件的ID |
getviewswithtext | getviewswithtext [text] | 返回所有包含指定文本的控件ID |
queryview | queryview viewed [id] [command] queryview accessibilityids [id1] [id2] [command] |
根據指定ID來查詢控件 |
2.monkey服務器實例
//點擊坐標500,500 tap 500 500 //按菜單鍵 press KEYCODE_MENU //在輸入框輸入10086 type 10086 //列出可查看的系統變量 listvar //獲取build.product的值 getvar build.product
三、Monkey檢查內存泄漏
1.分析內存泄漏工具與命令
1)HPROF文件:HPROF可以監控CPU使用率,堆分配統計
2)MAT工具:下載地址(http:www.eclipse.org/mat/)
3)生成HPROF文件命令:”adb shell am dumpheap <進程名> <保存路徑>”
4)查看應用內存命令:”adb shell dumpsys meminfo <進程名>”
5)轉換為MAT可讀文件指令:”hprof-conv <原HPROF文件路徑> <轉換后的HPROF文件路徑>”
2.基本操作步驟
1)運行Monkey或者固定自動化用例
2)監控內存值,如果出現過大等遞增異常則保存HPROF文件
3)對保存的HPROF文件進行轉化為MAT可讀文件
4)使用MAT打開文件,對多個文件進行對比分析
3.實例
- Android旋轉屏幕產生內存泄漏
1)輸入網址”http:www.eclipse.org/mat/”在頁面的links下面點擊download,然后在新頁面中選擇適合自己的系統進行下載,下載好后解壓即可
2)准備一個.bat后綴名的腳本,用來實時查看內存,腳本代碼如下:
set process=com.android.browser #需要測試的進程名 @adb shell dumpsys meminfo %process% | findstr "Pss" :m @adb shell dumpsys meminfo %process% | findstr "TOTAL" @ping -n 5 127.1>nul @goto m
3)在cmd窗口中使用monkey命令”adb shell monkey -p com.android.browser –pct-rotation 100 –throttle 2000 -v 20 ”
4)打開前面准備的.bat文件監控應用內存情況
5)monkey跑完后使用命令”adb shell am dumpheap com.android.browser /data/local/tmp/test.hprof”將結果保存
6)將保存好的.hprof文件pull到本地PC上”adb pull /data/local/tmp/test.hprof F:\test”
7)在F:\test路徑下shift+鼠標右鍵打開cmd窗口輸入命令”hprof-conv test.hprof test1.hprof”
8)使用下載好的mat.exe打開轉換后的test1.hprof文件進行查看分析(數據庫中使用命令”Select * from instanceof android.app.Activity來查看對象,對象越多內存泄漏越嚴重)