簡介
一年一度的暑假如期而至,每年必不可少的,便是《西游記》這部經典電視連續劇的播出,作為一名90后,對于這部經典劇的情誼,就是觀看已成為一種習慣。依然深刻的記得,小時候媽媽為了催促我睡覺,而關掉我的《西游記》,那種哀求不成繼而絕望的感覺,至今記憶猶新。長大后只要得空在家,哪怕手里做著其他的事情,也要把電視開著,聽一聽《西游記》。“你挑著擔,我牽著馬,迎來日出,送走晚霞——”這首基本人人能唱幾句的歌曲,陪著我們一代又一代人,走過童年,青年和少年,甚至中年,或許還有將來的老年。坐在沙發上,當熟悉的音樂響起,心中突然冒出一股莫名的激動,電視里活潑生動的師徒幾人,即便都能背出的故事情節,依舊能讓我露出微笑。猴哥桀驁不馴,開始也不聽命令,大鬧天宮也是亂打一番,闖進這里,跑出哪里,一會天上一會地下;后來戴上緊箍咒,老實了。猴哥我們不敢耍,但是猴哥的混血弟弟妹妹我們敢耍。耍猴在中國已有悠久歷史,最遲于唐朝已有出現,發源于今河南省新野縣。古人把猴子視為馬的守護神,常于馬廄內養猴子以留住馬匹,并讓猴子表演猴戲作祭祀之用,因此猴子又有“馬留”的別稱,此名稱至今仍保留在粵語中。日本于奈良時代從中國傳入猴戲。后來耍猴的宗教性變淡,有些只是純娛樂觀眾,一些小販為招攬顧客,也會養猴子表演賣技藝,尤其常見于賣武術、賣藥等行業。現時香港唯一一只獲漁農自然護理署發牌由人飼養的猴子金鷹,其已故前主人陳日標生前以賣藥為業,金鷹就在主人賣藥時表演。下邊這幅圖片想必大家都不陌生吧。想必耍猴大家在實地或者電視、電影中都看過,看著耍猴人,發出不同的指令猴子根據指令做出各種搞笑的動作,逗的你開懷大笑。這個不是天生的而是后天訓練的。前邊講解的monkey都是隨機事件流,Monkey(猴子)在手機里像個無頭蒼蠅亂蹦亂跳地大鬧一番;那么今天宏哥今天就教你如何讓猴子按您的指令在手機里大鬧,教你如何耍猴——Monkey(猴子)自定義腳本。
耍猴第一式 - 隱藏命令
?
monkey隱藏的兩個命令:
?
–pck-blacklist-file<黑名單文件>
–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 *37 * type= raw events 38 * count= 10 39 * speed= 1.0 40 * 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 *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名稱) 啟動被測應用的某個Activity 2.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 = user count = 1 speed = 500 start data >> #啟動應用程序 LaunchActivity(com.michael.words,com.michael.words.activity.SplashActivity) UserWait(5000) #點擊下步按鈕 Tap(615,609) UserWait(1000) #點擊編輯框 Tap(200,85,1000) #輸入sg DispatchString(sg)
以上腳本主要操作過程:
1、點擊夜神模擬器的應用中心
2、進入應用中心,點擊搜索框
3、在搜索欄輸入:hongge
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。
?

小結
?
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: ""
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
