android之monkey測試

來源:互聯網
上載者:User

標籤: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測試

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.