Monkey 是一個 Android 自動化測試小工具。主要用於Android 的壓力測試, 主要目的就是爲了測試app 是否會Crash.shell
顧名思義,Monkey就是猴子, Monkey測試,就像一隻猴子, 在電腦面前,亂敲鍵盤在測試。 猴子什麼都不懂, 只知道亂敲。經過Monkey程序模擬用戶觸摸屏幕、滑動Trackball、 按鍵等操做來對設備上的程序進行壓力測試,檢測程序多久的時間會發生異常。安全
Monkey 程序是由 Android 系統自帶,使用 Java 語言寫成。在Android文件系統中的存放路徑是: /system/framework/monkey.jar;app
Monkey.jar程序是由一個名爲「monkey」的Shell腳原本啓動執行,shell腳本在Android文件系統中 的存放路徑是:/system/bin/monkey;工具
Monkey 啓動方式:在 cmd 命令提示符裏面輸入命令行來啓動 monkey 測試。測試
1、Monkey簡介:
Monkey是Android中的一個命令行工具,能夠運行在模擬器裏或者現實設備中,向系統發送僞隨機的用戶事件流(點擊、滑動、Application切換、橫豎屏、應用關閉)實現對正在開發的應用程序進行壓力測試。monkey測試是一種爲了測試軟件的穩定性,健壯性的快速有效的方法。只針對Activity作測試,不能對Service作測試。spa
2、質量要求:
版本release(發佈)前,Monkey跑出來的結果中crash要爲0,final release前,Monkey跑完的總次數應爲25W,結果裏不容許有nullPointException出現。命令行
3、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日誌
用於指定反饋的信息級別(日誌的詳細程度),分爲三個級別,級別越高,日誌越詳細。code
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測試。
4、使用示例:(本例測試環境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
5、測試結果分析:
1.
2.
3.
4.
5>測試完成,沒有crash和exception出現的狀況
6>測試中間出現crash或者exception,monkey中止會打印相關錯誤信息。
6、monkey測試中止條件(也能夠在命令裏設置出現這些中止條件後能夠繼續跑完測試數量)
1>若是先頂了Monkey運行在一個或幾個特定的包上,那麼它會檢測試圖轉到它包的操做,並對其進行阻止;
2>若是應用程序崩潰或接收到任何失控異常,Monkey將中止並報錯;
3>若是應用程序產生了應用程序不響應(application not responding)的錯誤,Monkey將會中止並報錯。
經過屢次而且不一樣設定下的Monkey測試纔算它是一個穩定性和健壯性足夠的程序。
7、爲保證測試數量的完整進行,通常不會在發生錯誤時馬上退出壓力測試。monkey 測試命令以下
adb shell monkey -p 包名 -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v -v 10000
8、把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