第一式 - 隱藏命令
monkey隱藏的兩個命令:
–pck-blacklist-file<黑名單文件><br><br>–pck-whitelist-file<白名單文件>
monkey還有一個隱藏的命令那就是:
–f<腳本文件>:可以指定monkey的自定義腳本
一般monkey測試都是隨機的測試事件,假如我們需要測試某一個特定的場景,普通的命令很難辦到,這是就是需要自定義腳本這個命令了,它的使用方式也是很簡單方便的,只要我們按照monkey的腳本規范寫好腳本,之后將它保存到手機中,然后運行monkey的時候使用-f 命令指定腳本就行。
第二式 -?monkey自定義腳本格式
1、雖然,Google 官方并沒有提供對 MS 詳細講解的 API 文檔,但是我們是可以通過源碼來分析出 MS 支持的API的。
2、MS 的源碼文件是:MonkeySourceScript.java
3、monkey的源碼MonkeySourceScript.java類中有一段關于monkey腳本規則的描述MonkeySourceScript.java有興趣的同學可以去看一下這個源碼,這里以 5.1.1 為例子,進行講解,其實這一塊的代碼變動非常的少,找一個版本了解即可。我們看一下源碼(33行到46行)對j腳本規則描述。
腳本規則的描述
33/**34 * monkey event queue. It takes a script to produce events sample script format:35 *36 * <pre>37 * type= raw events38 * count= 1039 * speed= 1.040 * start data >>41 * captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,0.06666667,0,0.0,0.0,65539,0)42 * captureDispatchKey(5113146,5113146,0,20,0,0,0,0)43 * captureDispatchFlip(true)44 * ...45 * </pre>46 */
解釋他們的意思
#聲明腳本的類型type= raw events#腳本的執行次數,由于monkey運行次數在命令設置的,這里的設置是無效的count= 10#事件執行時間間隔,這個也是通過命令來設置,這里不起作用speed= 1.0#腳本的入口,說明腳本從下面開始執行start data >>#下全是monkey命令captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,0.06666667,0,0.0,0.0,65539,0)captureDispatchKey(5113146,5113146,0,20,0,0,0,0)captureDispatchFlip(true)
知道了monkey腳本書寫的基本格式,在來看一眼monkey常見腳本API
1.LaunchActivity(包名,Activity名稱)啟動被測應用的某個Activity2.Tap(x,y,TapDuration)一次單擊事件x,y:是坐標TapDuration:持續的時間,單位毫秒3.DispatchPress(keyName)模擬一個按鍵keyName:按鍵的名稱4.RotateScreen(RotationDegree,peresist)旋轉屏幕RotationDegree:0~3分別表示順時針的四個方向peresist:是否存留5.DispatchFiip(true/false)打開或關閉軟鍵盤6.LongPress()長按2秒7.PressAndHold(x,y,PressDuration)模擬長按事件x,y:點擊的坐標PressDuration:持續時常,單位毫秒8.DispatchString(input)輸入字符串input:輸入的內容9.Drag(xStart,yStart,xEnd,yEnd,pCount)模擬拖動操作xStart,yStart:開始的坐標值xEnd,yEnd:結束的坐標值pCount:滑動事件的次數10.PinchZoom(pt1xStart,pt1yStart,pt1xEnd,pt1yEnd,pt2xStart,pt2ystart,pt2xEnd,pt2yEnd)手勢縮放事件pt1xStart,pt1yStart:第一個手指起始的坐標位置pt1xEnd,pt1yEnd:第一個手指結束的坐標位置pt2xStart,pt2ystart:第二個手指開始的坐標位置pt2xEnd,pt2yEnd:第二個手指結束的坐標位置11.UserWait(sleepTime)設置睡眠時間sleepTime:等待時間,單位毫秒12.DeviceWake()喚醒設備屏幕
在源碼中,所有我們上面介紹的 API 都是以一個?static final
?的形式被聲明。這里簡單就 LaunchActivity 的方法的源碼進行講解,其他的 API 其實也大同小異。
LaunchActivity 的方法的源碼講解
1、瀏覽器輸入源碼地址,找到靜態字符串LaunchActivity,如圖:
?2、將鼠標定位到靜態字符串LaunchActivity通過ctrl(command)+🖱?左鍵我們可以定位到方法的位置。大約在597行,如圖:
?3、將鼠標定位到LaunchActivity的方法通過ctrl(command)+🖱?左鍵我們可以進入到方法代碼。大約在597行,如圖:
??
4、如上邊LaunchActiviity 方法源碼所示,LaunchActiviity 會以數組的形式接收兩個參數,分別表示 PackageName 和 Activity 的 ClassName,下面具體對應的實現,我們就不細看了。再參照上面介紹的 API ,就可以很清晰的定位出方法和參數的含義了。
5、有興趣的可以通過以上步驟一一查看哪些方法的API。?
耍猴第三式 -?monkey 腳本的實例
1、Monkey腳本主要包含兩部分,一部分是頭文件信息,一部分是具體的monkey命令。
2、按照2.1的腳本描述規則我們來編輯monkeyscript,如下:
type = usercount = 1speed = 500start data >>#啟動應用程序LaunchActivity(com.michael.words,com.michael.words.activity.SplashActivity)UserWait(5000)#點擊下步按鈕Tap(615,609)UserWait(1000)#點擊編輯框Tap(200,85,1000)#輸入sgDispatchString(sg)
以上腳本主要操作過程:
1、點擊夜神模擬器的應用中心
2、進入應用中心,點擊搜索框
3、在搜索欄輸入:test
4、結束
注意這里分別使用了 DispatchPress 和 DispatchString 來分別使用,就是為了做演示,實際你可以依賴場景選擇使用的 API 。而其中涉及到坐標點的問題,這個在后面會講解如何獲取控件的坐標點。
執行腳本
1、編寫好腳本,保存為monkey.script 文件。
2、通過 adb push 將其上傳到待測試的設備中。要push到sdcard文件夾中(這里一夜神模擬器為例),如圖:
adb push C:/Users/DELL/Desktop/monkey.script /sdcard/
3、查看有沒有push到設備中,從下圖可以看到成功的push進去了。如圖:
4、有興趣或者不相信的可以查看文件內容,如圖:
5、然后通過?monkey -f
?執行此腳本,例如下面執行 1次。
adb shell monkey -f /sdcard/monkey.script -v 1
6、效果截圖,在應用中心的搜索欄里輸入了:hongge。
7、執行完成之后,可以在控制臺,看到輸出的 Log 信息。
小結
1、通過adb pull和adb push 手機與電腦之間傳輸文件
(1)將手機卡中的某個文件復制到電腦
1,手機連接電腦后,在命令行輸入 adb devices,獲取到設備序列號后說明手機已經和電腦連接成功。
2,輸入: adb pull 手機存儲路徑 ?電腦路徑
adb pull ?/sdcard/xxx ?/Users/xxxx/xxx.tx
(2) 從電腦端向手機復制文件
1,輸入: adb pull 電腦路徑 ?手機存儲路徑 ?
?adb push ?/Users/xxxx/xxx.txt ? /sdcard/xxx
2、注意事項(此處有坑要注意!)
頭文件代碼書寫注意“=”兩邊預留空格,否則會出現如下報錯。
java.lang.NumberFormatException: Invalid int: ""