Monkey使用簡介

一、Monkey簡介:

Monkey是Android中的一個命令行工具,可以運行在模擬器裏或者現實設備中,向系統發送僞隨機的用戶事件流(點擊、滑動、Application切換、橫豎屏、應用關閉)實現對正在開發的應用程序進行壓力測試。monkey測試是一種爲了測試軟件的穩定性,健壯性的快速有效的方法。只針對Activity做測試,不能對Service做測試。

二、質量要求:

版本release(發佈)前,Monkey跑出來的結果中crash要爲0,final release前,Monkey跑完的總次數應爲10W,結果裏不允許有nullPointException\crash出現。

三、Monkey命令參數:

1>  -p

用於約束限制,用此參數指定一個或者多個包,指定包之後,monkey將只允許啓動指定app,如果不指定包,monkey將啓動系統中所有的app 。

例:指定一個包     monkey -p com.htc.weather -v 1000
        指定多個包     monkey -p com.htc.weather -p com.htc.pdfreader -p com.htc.photo.widgets -v 1000
        不指定包          monkey -v 1000

2>  -v

用於指定反饋的信息級別(日誌的詳細程度),分爲三個級別,級別越高,日誌越詳細。

level 0:

例:monkey -p com.htc.weather -v 1000

level 1:
例:monkey -p com.htc.weather -v -v 1000
level 2:
例:monkey -p com.htc.weather -v -v -v 1000

3> -s

指定僞隨機數生成器的seed值,如果seed相同,則兩次monkey 測試產生的事件序列也相同。

例: monkey -p com.htc.weather -s 35 -v 1000

4> --throttle(毫秒)

制定每個事件結束後的間隔時間,降低系統壓力。(如果不指定系統會盡快的發送事件序列)

例:monkey --throttle 300

5> 定製事件

--pct-touch:指定觸摸事件的百分比,例:--pct-touch 5%    , 其他相關的:
--pct-motion <percent> (滑動事件)
--pct-trackball <percent> (軌跡球事件) 
--pct-nav <percent> (導航事件 up/down/left/right)
--pct-majornav <percent> (主要導航事件 back key 、 menu key) 
--pct-syskeys <percent> (系統按鍵事件 Home 、Back 、startCall 、 endCall 、 volumeControl)
--pct-appswitch <percent> (activity之間的切換)
--pct-anyevent <percent>(任意事件)

6>調試選項

--dbg-no-events:初始化啓動的activity,但是不產生任何事件。
--hprof:指定該項後在事件序列發送前後會立即生成分析報告  —— 一般建議指定該項。
--ignore-crashes:忽略崩潰
--ignore-timeouts:忽略超時
--ignore-security-exceptions:忽略安全異常
--kill-process-after-error:發生錯誤後直接殺掉進程
--monitor-native-crashes:跟蹤本地方法的崩潰問題
--wait-dbg:知道連接了調試器才執行monkey測試。

 對單獨的APP進行測試
monkey-p com.hst.che --throttle 500 -s 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000 >/mnt/sdcard/monkey1.txt
說明:
--throttle(毫秒)事件之間插入的固定延遲。通過這個選項可以減緩Monkey的執行速度。如果不指定,Monkey將儘可能快的產生並執行事件。
-s 用於指定僞隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的。
--ignore-crashes 忽略程序崩潰。設置此選項後,Monkey會執行完所有的事件,不會因crash而停止。
--ignore-timeouts 忽略程序無響應。設置此選項後,Monkey會執行完所有的事件,不會因ANR而停止。
--ignore-security-exceptions 忽略證書或認證異常。設置此選項後,Monkey會執行完所有的事件,不會因認證或證書異常而停止。
--ignore-native-crashes 監視系統中本地代碼發生的崩潰
--monitor-native-crashes 忽略本地代碼導致的崩潰。設置忽略後,Monkey將執行完所有的事件,不會因此停止。
-v -v –v 提供最詳細的設置信息

四、使用示例:(本例測試環境Android studio+模擬器Nexus_5_API_23)

1>首先配置Android環境,要使用虛擬機測試的話,還要創建模擬器(真機測試就不用管)。

2>進入平臺工具,我的platform-tools在下圖所示路徑

在Android studio自帶的命令行(或者是cmd)裏輸入以下命令


3>啓動模擬器(執行adb devices命令可以列出已連接的設備),安裝待測試apk

先把apk放在platform-tools文件夾下,執行命令: adb install 文件名.apk

4>找到應用程序的主Activity所在的包名,分別執行以下命令:


ls命令執行之後從列出的包名中找到要測試的apk的主Activity的包名。

5>使用monkey進行自動化測試

monkey -p 包名 -v 1000

五、測試結果分析:

1>


2>


3>


4>


5>測試完成,沒有crash和exception出現的情況


6>測試中間出現crash或者exception,monkey停止會打印相關錯誤信息。

六、monkey測試停止條件(也可以在命令裏設置出現這些停止條件後可以繼續跑完測試數量)

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

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

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

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

七、爲保證測試數量的完整進行,一般不會在發生錯誤時立刻退出壓力測試。monkey 測試命令如下

adb shell monkey -p 包名 -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v -v 10000

八、把log導出到本地

這裏分爲兩種情況:

1.如果我們沒有進入到shell則直接執行命令:

adb shell monkey -p 包名 -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v -v 10000 > E:\monkey_log\test1.txt

2.

如果已經進入adb shell,正確的導出步驟:(在前邊我們執行完adb shell命令之後,進入shell命令相當於進入Linux的root下面,沒有權限在裏面創建文件。

執行exit命令退出shell

然後執行adb shell monkey -p 包名 -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v -v 10000 > E:\monkey_log\test1.txt


分析log


日誌開頭:顯示本次測試seed值,執行次數,測試包,


日誌結尾:

如果Monkey測試順利執行完成,在log的最後,會打印出當前執行事件的次數和所花費的時間;Monkey finished代表執行完成。

(如果Monkey執行中斷,在log的最後也能查看到當前已執行的次數。


日誌內容分析

一般測試結果分析-搜索關鍵字
1.程序無響應,ANR問題:在日誌中搜索“ANR”
2.崩潰問題:在日誌中搜索CRASH

3.其他問題:在日誌中搜索Exception


詳細分析monkey日誌

Switch--查看log中Switch,主要是查看Monkey執行的是那一個Activity,兩個swtich之間如果出現了崩潰或其他異常,可以在該Activity中查找問題的所在。

Sleeping--Sleeping for 500 milliseconds這是執行Monkey測試時,throttle設定的間隔時間,每出現一次,就代表一個事件。


重現問題

Monkey測試出現錯誤後,一般的錯步驟爲以下幾步:
1.找到是monkey裏面的哪個地方出錯
2.查看Monkey裏面出錯前的一些事件動作,並手動執行該動作
3.若以上步驟還不能找出,可以使用之前執行的monkey命令再執行一遍,注意seed值要一樣


發佈了31 篇原創文章 · 獲贊 16 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章