Monkey壓力測試--用來做穩定性測試
Monkey壓力測試
一、什麼是Monkey
Monkey是Android SDK附帶的一個工具,一個做app壓力測試的工具,通過某些Linux命令,產生一定數量或一定時間內的隨機模擬使用者操作的事件, 如點選、按鍵、手勢等, 以及一些系統級別的事件。通常也稱隨機測試或者穩定性測試。
二、測試環境搭建
安裝Android SDK 並配置環境變數即可。可參考:JDK與adb/android環境變數配置完整教程
三、測試步驟
1、本地建立白名單檔案,如:whitelist.txt,將包名新增到該檔案中
如:com.ubtechinc.cruzr.advert
com.ubtechinc.cruzr.aiui
com.ubtechinc.cruzr.behavior
com.ubtechinc.cruzr.calendar
com.ubtechinc.cruzr.clock
com.ubtechinc.cruzr.coreservices
com.ubtechinc.cruzr.cruzralbum
com.ubtechinc.cruzr.cruzrbootwizard
com.ubtechinc.cruzr.dance
com.ubtechinc.cruzr.freeguide
com.ubtechinc.cruzr.introduce
com.ubtechinc.cruzr.launcher
com.ubtechinc.cruzr.launcher2
com.ubtechinc.cruzr.map
com.ubtechinc.cruzr.music
com.ubtechinc.cruzr.navigation
com.ubtechinc.cruzr.pccontrolstub
com.ubtechinc.cruzr.power
com.ubtechinc.cruzr.servicesupport
com.ubtechinc.cruzr.systemupdate
com.ubtechinc.cruzr.syswarn
com.ubtechinc.cruzr.timer
com.ubtechinc.cruzr.user
com.ubtechinc.cruzr.video
com.ubtechinc.cruzrpowersettings
com.ubtechinc.cruzrrosexceptionstats
com.ubtechinc.settings
2、電腦連線到裝置,將測試應用白名單push到Android系統,如:
adb push d:/Monkey/whitelist.txt /mnt/sdcard/data/whitelist.txt
3、登入adb:adb shell
4、呼叫Monkey命令
monkey --pkg-whitelist-file /mnt/sdcard/data/whitelist.txt -s 101 --pct-touch 70 --pct-motion 20 --pct-trackball 10 --throttle 300 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 50000 |logcat -v time&>/mnt/sdcard/data/monkey_1019.log
引數說明:
--pkg-whitelist-file /mnt/sdcard/data/whitelist.txt //測試應用白名單
--s 50 //種子序列,出問題需要用相同種子值進行復現;沒測出問題,下次需要重新修改種子值再跑
--pct-touch 70 //觸控事件的百分比(觸控事件是一個down-up事件,它發生在螢幕上的某單一位置)
--pct-motion 20 //動作事件的百分比(動作事件由螢幕上某處的一個down事件、一系列的偽隨件機事和一個up事件組成)
--pct-trackball 10 //表示調整軌跡球事件的百分比(軌跡球事件由一個或多個隨機移動組成,有時還伴隨有點選)
--throttle 300 //毫秒,操作延時
--ignore-crashes //忽略無響應,繼續執行
--ignore-timeouts //忽略Crash繼續執行
--monitor-native-crashes //用於指定是否監視並報告應用程式發生崩潰的原生代碼
--ignore-security-exceptions //表示當應用程式遇到任何型別的許可權錯誤時,Monkey將停止,例如,如果它嘗試啟動需要某些許可權的活動。如果指定此選項,則Monkey將繼續向系統傳送事件,直到計數完成
-v 日誌等級, 通過-v引數可以指定列印資訊的詳細級別,多一個-v多一個級別
級別 |
表示 |
描述 |
0 |
-v |
列印最基本的事件 |
1 |
-v-v |
更全面的資訊,如增加了那些Activity被選中 |
2 |
-v-v-v |
日誌記錄最全面的資訊 |
50000 //事件數量
> monkey_1019.log //日誌儲存本地SD卡
--kill-process-after-error //當Monkey由於一個錯誤而停止時,出錯的應用程式將繼續處於執行狀態。當設定了此選項時,將會通知系統停止發生錯誤的程序。注意,正常的(成功的)結束,並沒有停止啟動的程序,裝置只是在結束事件之後,簡單地保持在最後的狀態
--monitor-native-crashes //表示Android系統原生程式碼中的監視和報告崩潰。如果設定了-kill-process-after-error,系統將停止
--wait-dbg //表示停止執行中的Monkey,直到有偵錯程式和它相連線
tips:
1) 若只跑指定的幾個包,可以不設定白名單,直接執行指令(-p部分新增要執行的包):
adb shell
monkey -p com.ubtechinc.cruzr.music -p com.ubtechinc.cruzr.video -s 50 --pct-touch 70 --pct-motion 20 --pct-trackball 10 --throttle 300 --monitor-native-crashes -v -v -v 10000&>/mnt/sdcard/data/ monkey_1019.log
2)不指定應用,跑安卓系統
adb shell
monkey -s 68 --pct-touch 70 --pct-motion 20 --pct-trackball 10 --throttle 300 --monitor-native-crashes -v -v -v 50000 &>/sdcard/monkey/ monkey_1019.log
3)指定黑名單,不執行該應用
a. 建立黑名單檔案blacklist.txt
b. push黑名單到Android系統:adb push d:/Monkey/whitelist.txt /mnt/sdcard/data/blacklist.txt
c. 執行的時候增加--pkg-whitelist-file /mnt/sdcard/data/ blacklist.txt
四、匯出日誌及日誌分析
1、匯出日誌到本地:
adb pull /mnt/sdcard/data/ monkey_1019.log E:\Cruzr\Monkey\log\ monkey_1019.log
2、日誌分析
1)無響應問題可以在日誌中搜索 “ANR”,崩潰問題搜尋 “CRASH”, 如果碰到這兩類問題,抓取日誌同時,需要提供traces.txt,具體存放目錄可詢問開發
2)記憶體洩露問題搜尋"GC"(需進一步分析),異常問題搜尋 “Exception”(如果出現空指標, NullPointerException,需重視)
(Monkey日誌內容分析:
一般測試結果分析-搜尋關鍵字:
1.程式無響應,ANR問題:在日誌中搜索“ANR”
2.崩潰問題:在日誌中搜索“CRASH”
3.其他問題:在日誌中搜索”Exception”
4.ForceClosed 和程式異常退出問題:在日誌中搜索"Fatal"
5.搜尋“system error”)
五、如何中斷測試
1、登入adb :adb shell
2、檢視程序號:ps | grep monkey
3、kill掉w程序:kill <程序號>
操作說明:(單獨一個資料夾複製過來的,僅供參考)
Cruzr Monkey測試操作說明 monkey --pkg-whitelist-file /mnt/sdcard/monkey/whitelist.txt -s 88 --pct-touch 70 --pct-motion 20 --pct-trackball 10 --throttle 800 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 50000
1、將測試應用白名單push到Android系統,如:
adb push d:/monkey/whitelist.txt /mnt/sdcard/monkey/whitelist.txt
2、登入adb
adb shell
3、呼叫Monkey
monkey --pkg-whitelist-file /mnt/sdcard/monkey/whitelist.txt -s 53 --pct-touch 70 --pct-motion 20 --pct-motion 10 --throttle 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v -v 100000 &>/mnt/sdcard/monkey/b0f1ecac466e_0806-001.log
引數說明:
--pkg-whitelist-file /mnt/sdcard/data/whitelist.txt //測試應用白名單
-s 50 //種子序列(不同的隨機操作系列),出問題需要用相同種子值進行復現;沒測出問題,下次需要重新修改種子值再跑
--pct-touch 70 //觸控事件的百分比(觸控事件是一個down-up事件,它發生在螢幕上的某單一位置)
--pct-motion 20 //動作事件的百分比(動作事件由螢幕上某處的一個down事件、一系列的偽隨件機事和一個up事件組成)
--pct-motion 20 “基本”導航事件的百分比(導航事件由來自方向輸入裝置的up/down/left/right組成)
--throttle 500 //毫秒,操作延時
-ignore-crashes //忽略無響應,繼續執行
--ignore-timeouts //忽略Crash繼續執行
--monitor-native-crashes 用於指定是否監視並報告應用程式發生崩潰的原生代碼
-v 日誌等級
500000 //事件數量
>>/mnt/sdcard/data/b0f1ecac46a3_0319-001.log //標準輸出日誌儲存本地SD卡
&>/mnt/sdcard/data/b0f1ecac46a3_0319-001.log //標準輸出和標準錯誤輸出日誌儲存到本地SD卡
-v -v -v 500000 |logcat -v time &>/mnt/sdcard/hly-0414-002.log //輸出日誌帶時間戳
4、匯出日誌
adb pull /mnt/sdcard/monkey/b0f1ec8c21b7_0327-001.log d:/Monkey/b0f1ec8c21b7_0327-001.log
單個應用跑Monkey
adb shell monkey -p com.ubtechinc.cruzr.timer -s 50 --pct-touch 70 --pct-motion 20 --pct-motion 10 --throttle 500 --monitor-native-crashes -v -v -v 100000>d:/monkey/ test.log
多個應用跑Monkey
adb shell monkey -p com.ubtechinc.cruzr.timer -p com.ubtechinc.cruzr.launcher -s 50 --pct-touch 70 --pct-motion 20 --pct-motion 10 --throttle 500 --monitor-native-crashes -v -v -v 100000>d:/monkey/test.log
待確認:
monkey --pkg-whitelist-file /mnt/sdcard/monkey/whitelist.txt -s 55 --pct-touch 70 --pct-motion 20 --pct-motion 10 --throttle 300 --monitor-native-crashes -v -v -v 50000 &>/mnt/sdcard/monkey/fss0324-006.log
monkey --pkg-whitelist-file /mnt/sdcard/monkey/whitelist.txt -s 55 --pct-touch 70 --pct-motion 20 --pct-motion 10 --throttle 300 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v -v 30000 &>/mnt/sdcard/m