標籤:targe stat net 檔案 level 啟動 target sqlite users
本文同時發表於本人個人網站 www.yaoxiaowen.com
monkey測試算是android自動化測試當中最簡單的一種工具了。雖然簡單,不過對於測試app的穩定健壯,減少崩潰還是比較有用的。所以建議app可以經常做些monkey測試,下班之後,開啟monkey測試,就不用管了,第二天來了查看結果就好。
一:monkey介紹
Monkey就是Android的一個命令列工具,是運行在手機裡的。(可以模擬器可以真機),它通過向系統發送偽隨機的使用者事件流(比如手勢,按鍵,觸控螢幕觸摸事件等),來實現對app的測試。當然,因為它的事件流資料是隨機的,不能自訂,這點也算是一個缺陷。
所以monkey這個名字還是挺貼切的,就是像猴子那樣亂點,
二,使用前期準備
1,我們平時在cmd命令工具裡使用adb命令等,都要進入adb所在的檔案目錄,這點比較麻煩,所以我們要把adb命令添加進window的環境變數。方法如下(win7為例):
依次點擊:電腦->屬性->進階系統設定->進階->環境變數-> 系統變數 ->編輯 Path ,在在變數值後面添加一行 C:\Users\Administrator\AppData\Local\Android\sdk\platform-tools,(當然這是我自己的電腦目錄,其他人的電腦目錄可能會不同)。
這樣 platform-tools檔案夾下面的 adb,sqlite3,fastboot等工具都可以直接使用了。
2,手機開啟開發人員模式裡面的usb調試,然後 通知欄選項裡面要選擇 傳輸檔案,而不能選擇 只充電,
usb串連真機後,(或者開啟類比機),使用命令
adb devices
顯示 內容:
List of devices attached
ec771855 device
這樣就代表adb已經串連到手機了。
三,運行monkey
cmd命令列輸入命令。
$ adb shell monkey -s 161218 -p com.tc.tickets.train.dev -v -v –throttle 500 60000 > C:\Users\Administrator\Desktop\tongcheng\log\moneky_12121802.txt
一些option的解釋:
adb shell monkey:啟動monkey,monkey其實是通過android環境的shell來啟動的。
-s 偽隨機數產生器的 seed 值。相同的種子值,產生相同的事件序列,所以每次運行前這個值要改成不同,改成當天的日期是最簡單好記的。
-p 需要測試的app包名,約束限制,不過其實可以指定多個包的,比如: adb shell monkey -p com.yaoxiaowen.prj –p com.yaoxiaowen.demo
-v
用於指定反饋資訊層級(資訊層級就是日誌的詳細程度),總共分3個層級,分別對應的參數如下表所示:
記錄層級 : Level 0
寫法樣本 :–v
說明 :預設值,僅提供啟動提示、測試完成和最終結果等少量資訊
記錄層級 : Level 1
寫法樣本 :–v -v
說明 :提供較為詳細的日誌,包括每個發送到Activity的事件資訊
記錄層級 : Level 2
寫法樣本 :–v -v -v
說明 :最詳細的日誌,包括了測試中選中/未選中的Activity資訊
–throttle (毫秒)
在事件之間插入固定延遲。通過這個選項可以減緩 Monkey 的執行速度。如果不指定該選項, Monkey 將不會被延遲,事件將儘可能快地被產成。所以我建議還是加入一定的延遲,因為一般人手指頭的滑鼠鍵按兩下速度, 是無論如何也不可能跟得上機器的滑鼠鍵按兩下速度的,所以我認為,如果是因為 點擊太快而引起的bug,那麼是可以 忽略的。
60000
這條命令裡,是代表共計運行60000次事件流。設定這個值之前,記得結合–throttle的值,計算一下你想讓它啟動並執行時間(一般我設定的就是 讓它運行一夜然後結束,第二天上班,正好來看結果).
> C:\Users\Administrator\Desktop\tongcheng\log\moneky_12121802.txt
這條命令的意思是,讓它輸出的log資訊匯入到案頭的moneky_12121802.txt檔案裡,如果不設定這句話,log資訊都輸出在cmd命令列裡的,不方便查看,所以還是把它輸入到檔案裡好好查看吧。
當然,還有很多其他的命令,不過這幾個簡單的命令,就足夠我們測試使用了。
四:monkey停止條件
如果應用程式崩潰 閃退,或者有其他失控異常,或者 app不響應(ANR)。monkey將會停止並報錯。否則它就會執行你設定的次數。(比如 60000次),執行完成之後才會停止。
五:如何中途停止monkey
monkey有個很讓人抓狂的特點,就是一旦跑起來之後,哪怕你把usb資料線和pc斷開,monkey指令碼還是會淡定的執行下去。所以我們如果想中途停止,那麼這裡有個辦法。
1. adb shell
2. top | grep monkey (或者 ps | grep monkey 也行)
顯示如下:
5447 0 1% S 10 262960K 10328K root com.android.commands.monkey
5447 0 0% S 10 262960K 10324K root com.android.commands.monkey
3,找到id為5447的進程,然後再kill掉就OK了
kill -9 5447
六:Monkey測試結果分析
拿到monkey的log檔案,我們是通過關鍵字來判斷測試是否正常的
1,如果最後一行內容是,Monkey finished,那麼就表明本次測試過程中,沒有異常發生。
eg:
## Network stats: elapsed time=3799ms (3799ms mobile, 0ms wifi, 0ms not connected)
// Monkey finished
2,表明存在異常的關鍵字:CRASH ,NOT RESPONDING, ANR,Exception,Out of memory,error
如果存在這些關鍵字,就表明測試發生了異常,我們就要結合 log的上下文,來判斷 異常發生的原因,然後修改代碼了。
3,非正常結束,也沒有對應的異常關鍵字。
那麼這時候,就要看看log檔案的最後幾行是什麼內容了,進行對應的分析 ,如果分析不出來啥異常,那就說明是外部原因而非程式本身原因了。比如斷電關機,記憶體不足等等。
七:monkey日誌自動分析指令碼
對於monkey的分析,手動搜尋太麻煩,所以有指令碼來處理是最好的。我在 http://www.cnblogs.com/findyou/p/4106285.html 這篇部落格上找到一個bat指令碼(再次感謝對方的分享),(不過他那篇部落格的代碼部分,直接複製到bat檔案中,有錯誤,讓我折騰了 好久,估計是因為編碼問題吧),我把這個bat指令碼,做了一點修改。放在csdn上( http://download.csdn.net/detail/yaowen369/9759769),可以直接下載使用。
使用方法:直接將Monkey日誌的txt檔案,用滑鼠拖到此bat檔案上,就輸出執行了。
八:其他問題
有個問題困擾了我好久,因為app代碼中有部分h5頁面,monkey測試有時候可能會進入這些html頁面,進入容易, 跳出就很難了,也找不到更好的解決辦法,只能在代碼中添加一個 MONKEY_TEST 的boolea值開關,然後在進入h5頁面的button按鍵事件時進行判斷,進行 monkey測試時開啟這個值,專門編譯一個apk,就可以避免其跳入h5頁面了。
希望這篇部落格能夠協助到使用monkey測試的同行們,文中有什麼不足或錯誤的地方,歡迎批評指正。
android之monkey測試