Android Monkey 腳本編寫與檢查內存泄露


一、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來查看對象,對象越多內存泄漏越嚴重)


免責聲明!

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



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