【Android測試】【第六節】Monkey——認識和使用


 版權聲明:本文出自carter_dream的博客,轉載必須注明出處。

    轉載請注明出處:http://www.cnblogs.com/by-dream/p/4688880.html

 

 

自動化工具


  接觸安卓測試最早聽說的一個工具就是Monkey,很有意思的名字,當然也很容易學習。

 

名詞解釋


  個人推薦,如果有精力的最后還是讀一下這個文檔:http://developer.android.com/intl/zh-cn/tools/help/monkey.html

  Monkey是一個運行在你手機上的程序,它可以產生一些偽隨機事件流,例如點擊(clicks)、觸摸(touches )、手勢(gestures)以及 一些系統級消息(system-level events),你可以用Monkey來對你程序進行隨機而又重復的壓力測試上面提到的偽隨機,這里需要解釋一下,意思就是看似像是隨機的事件,事實上並不是隨機的事件,每次啟動monkey測試的時候,你可以設置一個隨機數種子,如果種子是一致的話,模擬出的隨機事件也是一致的,因此這稱為偽隨機事件。)

  Monkey包含了若干的操作選項,但大體為四個主要的類別:

  1、基本配置選項(Basic configuration options):

  2、操作約束(Operational constraints):

  3、時間類型和頻率(Event types and frequencies)

  4、調試選項(Debugging options)

  當Monkey運行起來的時候,它會產生一些事件發給系統,同時它也會監控系統,並且處理下面的三種情況:

  1、如果你用Monkey指定去跑一個或者多個包名(packages),它就會阻止一些試圖想進入其他應用的操作事件;

  2、如果你的應用程序 crashes 或者是收到一些未處理的異常(unhandled exception),Monkey就會停止並且記錄下出錯時候的日志;

  3、日后你的應用程序產生了應用程序無響應的錯誤(application not responding),Monkey也會停止並且記錄下出錯時候的日志;

  另外根據你選擇的日至級別的詳細情況( verbosity level),你可以從日志中看到Monkey運行的一個進展。

 

基本用法


  Monkey 命令是通過 adb shell 命令行的方式來進行運行的。

  基本的語法格式:

adb shell monkey [options] <event-count>

  輸入一個幫助命令:

 

命令參數


  可選參數有些多,不知道該從哪里開始講,突然想到當年剛開始從C++測試轉做Android測試的時候,總是想把所有的工具都做成windows應用程序,當年也確實做了一個Monkey的windows工具,可惜最后沒用上,剛才又把代碼拿出來改了改,剛好能編譯過了,我們就通過這個工具來把Monkey的使用分類給看一下吧。

  一共分為五部分,我們一個一個來看:

  一、測試對象

    首先要確定你的測試對象,這個測試對象可以是一個應用,也可以是的多個應用,或者是整個手機。

    具體的語法是:

adb shell monkey -p 包名

    注意-p后面跟的是應用程序的包名,比如微信的包名是 com.tencent.mm  手Q的包名是 com.tencent.mobileqq。如何獲得一個應用的包名,查看攻略

    我們如果想隨機測試qq400次,那么命令就是:adb shell monkey -p com.tencent.mobileqq 400

 

 

   二、日志級別

    Monkey中日志分別有三種級別:精簡(默認)、普通、詳細,上面運行的結果就是默認的精簡。

    語法格式是用 “-v” 來表示日志的級別:

    -v 代表 精簡;-vv 或者 -v -v 代表 普通;-vvv 或 -v -v -v 代表 詳細。

    例如我們還是想隨機測試qq400次,但是這次需要日志的級別是詳細的,那么命令就是:adb shell monkey -vvv -p com.tencent.mobileqq 400

   

  三、事件

    事件中的參數seed和throttle用法需要單獨說,剩下的都是一類型的事件,待會只舉一個例子。

    -s <seed>    用於指定偽隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的。

           例如:adb shell monkey -p com.tencent.mm –s 10 100    運行兩次測試的效果是相同的,因為模擬的用戶操作序列(每次操作按照一定的先后順序所組成的一系列操作,即一個序列)是一樣的。操作序列雖然是隨機生成的,但是只要我們指定了相同的Seed值,就可以保證兩次測試產生的隨機操作序列是完全相同的,所以說Monkey是偽隨機的。

    --throttle <milliseconds>  用於指定用戶操作(即事件)間的時延,單位是毫秒

           例如:adb shell monkey -p com.tencent.mm –throttle 1000 100    每次隨機事件中間的間隔時間為1000毫秒,也就是1秒鍾

    --pct-touch <percent> 調整觸摸事件的百分比(觸摸事件是一個down-up事件,它發生在屏幕上的某單一位置)。

                 注意percent代表了這個事件占到所有隨機事件的百分比數,多個參數指定的時候,加起來的百分比數不能多於100。剩下的幾個參數同理:

    --pct-motion <percent>     motion一般代表的是直線滑動,事件由屏幕上某處的一個down事件、一系列的偽隨機事件和一個up事件組成;

    --pct-trackball <percent>   軌跡事件由一個或幾個隨機的移動組成,有時還伴隨有點擊;

    --pct-nav <percent>           早期Android手機上的up/down/left/right按鍵;

    --pct-majornav <percent>  引發圖形界面中的動作,如:5-way鍵盤的中間按鍵、回退按鍵、菜單按鍵;

    --pct-syskeys <percent>     這些按鍵通常被保留,由系統使用,如Home、Back、Start Call、End Call及音量控制鍵;

    --pct-appswitch <percent> 在隨機間隔里,Monkey將執行一個startActivity()調用,作為最大程度覆蓋包中全部Activity的一種方法;

    --pct-anyevent <percent>   它包含了所有其它類型的事件,如:按鍵、其它不常用的設備按鈕等等

            例如:adb shell monkey -p com.tencent.mm --pct-touch 50 --pct-trackball 30 100    執行100次的隨機事件中,有50%的touch事件和30%的軌跡球事件,其他事件隨機比例分布。

 

   四:調試

     這個里面的參數基本上都不會使用,我只講一個。

     --ignore-crashes  當應用程序發生crash之后,Monkey會停止發送事件,但是如果你加入了這個參數,即使發生了crash,Monkey也不會停止。

               例子:adb shell monkey -p com.tencent.mm --ignore-crashes 100 

   五:次數

     根據前面的那么例子應該知道這個的含義了吧,就是模擬多少次事件,這個和log中也可以對應起來。

 

 

寫入腳本,每天執行


  Monkey可以說是一個投入產出比非常高的一個工具,你可以將你的Monkey命令寫入到批處理當中,然后晚上走的時候打開Monkey跑一晚上,第二天來了之后查看日志,看應用是否發生了崩潰。

  保存日志的方法和Logcat保存的方法一致,采用重定向的方法,不過你可以把它寫到你的 “批處理”腳本中。

  然后每天直接雙擊 “Monkey測試.bat” 即可。運行完畢,去C盤下查看結果即可。  

  


免責聲明!

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



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