1. 程式人生 > >Monkey壓力測試--用來做穩定性測試

Monkey壓力測試--用來做穩定性測試

Monkey壓力測試

一、什麼是Monkey

Monkey是Android SDK附帶的一個工具,一個做app壓力測試的工具通過某些Linux命令,產生一定數量或一定時間內的隨機模擬使用者操作的事件, 如點選、按鍵、手勢等, 以及一些系統級別的事件。通常也稱隨機測試或者穩定性測試。

二、測試環境搭建

安裝Android SDK 並配置環境變數即可。可參考:JDKadb/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