1. 程式人生 > >Android自動化壓力測試圖解教程——Monkey工具

Android自動化壓力測試圖解教程——Monkey工具

有時候我們需要對一個軟體進行壓力測試,檢查該軟體的效能。如果是人工進行測試的話,效率會低很多,而且會比較枯燥。這時,Android中的一個命令列工具Monkey就可以為我們減輕很多重複而又繁瑣的工作。

        一、Monkey簡介

      至於Monkey的名字是有何而來的呢?這個沒有去怎麼考究,Monkey這個工具就是一個調皮的猴子,在App中亂按、亂摸、亂滾、亂跳。Monkey測試是android平臺下自動化測試的一種快速有效的手段,通過Monkey工具可以模擬使用者觸控式螢幕幕、滑動軌跡球、按鍵等操作來對模擬器或者手機裝置上的軟體進行壓力測試,檢測該軟體的穩定性、健壯性。它的原理是向系統傳送偽隨機的使用者事件流(如按鍵輸入、觸控輸入、手勢輸入等),實現對正在開發的應用程式進行壓力測試。

      二、Monkey的特性

    (1)測試的物件僅為應用程式包(apk包),有一定的侷限性;

    (2)Monkey測試使用的事件流資料流是隨機的,不能進行自定義;

    (3)可對MonkeyTest的物件、事件數量、型別、頻率等進行設定。

      雖然Monkey工具並不完善,但是足於應付應用程式的基本測試需要了。如果需要功能更強大的測試工具的話,可以使用Monkey的進化版MonkeyRunner。如果把Monkey看作是幼兒園的小孩,那麼它的進化版MonkeyRunner就可以看作是一個初中生了。它支援自定義外掛,控制事件,隨時截圖,簡而言之,任何你在模擬器/裝置中能幹的事情,MonkeyRunner都能幹,而且還可以記錄和回放。在這裡,就不詳細介紹MonkeyRunner了,具體可以參考其官方文件或者其他相關資料。

     注:MonkeyRunner官方文件的網址

    三、Monkey的基本用法

    基本語法如下:

    $ adb shell monkey [options]

    如果不指定options,Monkey將以無反饋模式啟動,並把事件任意傳送到安裝在目標環境中的全部包。下面是一個更為典型的命令列示例,它啟動指定的應用程式,並向其傳送1000個偽隨機事件:

    $ adb shell monkey -p your.package.name -v number

    $ monkey -p(package的意思)  指定檔名 -v(測試的次數和頻率) number(次數)

    四、Monkey測試示例圖解

    通過簡單的測試示例,初步瞭解並掌握Monkey測試的步驟。注意,這裡主要是使用adb命令進行安裝和相關操作。測試的具體參考步驟如下:

   下載好後,得到下圖所示的apk檔案。

  

   (2)將apk檔案複製到android sdk對應platform-tools的目錄下。例如,筆者的sdk路徑為 D:\android\android-sdk-windows\platform-tools。如圖所示

   

    (3)進行apk檔案的安裝(安裝的前提是,已經啟動並可以檢測模擬器):有安裝91助手或者豌豆的使用者可以直接雙擊apk檔案進行安裝;也可以使用android下的adb命令進行安裝(如下圖所示,Success表示安裝成功)。adb命令下安裝apk檔案的命令為:adb install 檔名.apk。

   

 (4)安裝好後,會在模擬器上看到應用程式的啟動圖示

    

   (5)安裝好apk檔案後,需要知道應用程式主Activity(第一個啟動的Activity)所在的包名。這時,我們可以使用adb shell命令查詢到程式主Activity所在的包名,如下圖所示。(知道了apk的包名,我們也可以利用adb命令進行應用程式的解除安裝;解除安裝apk檔案的命令為:adb uninstall 包名)

  

    (6)這裡是最關鍵的一步,使用moneky命令進行自動化壓力測試。

    命令為:#monkey -p com.gewara -v 1000(引數說明:-p後跟著軟體所在包名,-v後跟測試的次數)。這裡對該軟體進行1000次的自動化測試,幾分鐘內即可以完成測試。如圖所示

  

   

  

  

 

  (7)測試完畢,發現程式出錯了。程式出錯,表明該軟體的穩定性和健壯性還有待提高。

  這時,可以開啟Lotcat查看出錯資訊。如圖所示

      

      五、Monkey測試的停止條件

   (1)如果先頂了Monkey執行在一個或幾個特定的包上,那麼它會檢測試圖轉到它包的操作,並對其進行阻止;

   (2)如果應用程式崩潰或接收到任何失控異常,Monkey將停止並報錯;

   (3)如果應用程式產生了應用程式不響應(application not responding)的錯誤,Monkey將會停止並報錯。

    通過多次並且不同設定下的Monkey測試才算它是一個穩定性和健壯性足夠的程式。

    六、Monkey命令引數說明

    隨著測試的深入,我們需要忽略App的崩潰(App的崩潰會導致Monkey測試的停止),而不是停住,monkey同樣能做到。--ignore crashes

   甚至,它還能生成profiling報告。 --hprof

   注:Monkey具體引數的設定可參考:

   通過引數的設定,可以完成更多的除錯功能,Monkey命令列引數中文相關說明見下表。