Android壓力測試-Monkey

1、什麼是Monkey

Monkey是一個Android平臺下一個命令行自動化測試工具,能夠運行在模擬器裏或實際設備中。 它向系統發送僞隨機的用戶事件流(如按鍵輸入、觸摸屏輸入、手勢輸入等),實現對正在開發的應用程序進行壓力測試。Monkey包括許多選項,它們大體分爲四大類:android

  • 基本配置選項,如設置嘗試的事件數量
  • 運行約束選項,如設置只對單獨的一個包進行測試
  • 事件類型和頻率
  • 調試選項

在Monkey運行的時候,它生成事件,並把它們發給系統。同時,Monkey還對測試中的系統進行監測,對下列三種狀況進行特殊處理(中止條件):shell

  • 若是限定了Monkey運行在一個或幾個特定的包上,那麼它會監測試圖轉到其它包的操做,並對其進行阻止。
  • 若是應用程序崩潰或接收到任何失控異常,Monkey將中止並報錯。
  • 若是應用程序產生了應用程序不響應(ANR:application not responding)的錯誤,Monkey將會中止並報錯。

 按照選定的不一樣級別的反饋信息,在Monkey中還能夠看到其執行過程報告和生成的事件 app

 

2、測試準備工具

Monkey test前必須先進入android設備的adb shell(Android SDK環境配置不在此描述,網上有不少)步驟以下:測試

1. 進入終端spa

2. usb鏈接手機,輸入 adb shell 命令命令行

3. 進入手機後,輸入相應的monkey命令便可測試 調試

3、Monkey的基本命令格式   

基本語法以下:日誌

  一、$ adb shell monkey [options]  進程

 adb shell monkey –p 程序包 –v 測試次數

 若是不指定options,Monkey將以無反饋模式啓動,並把事件任意發送到安裝在目標環境中的所有包。

 下面是一個更爲典型的命令行示例,它啓動com.android.email程序包,並向其發送500個僞隨機事件:$ adb shell monkey -p com.sankuai.XXX -v 500

 二、執行單一apk:

monkey –p <options> -c <options> -s <seed> <限制語句> --throttle <milliseconds> -v 執行次數> C:\monkey_test.txt

 三、執行apk集合:

 monkey –pkg-blacklist-file /data/blacklist.txt -c <options> -s <seed> <限制語句> --throttle <milliseconds> -v 執行次數> C:\blacklist_test.txt //執行黑名單之外的應用

 或

monkey –pkg-whitelist-file /data/whitelist.txt -c <options> -s <seed> <限制語句> --throttle <milliseconds> -v 執行次數 > C:\whitelist_test.txt //執行白名單的應用

4、測試Log獲取

用Monkey test測試,爲了方便分析問題,能夠在命令monkey命令後面加上 「|logcat -v time」,這樣就能邊測試邊打印Log(記得用終端保存Log文本)例如:

 adb shell monkey –p com.android.email  –v 20000|logcat -v time

 可是這個組合在monkey測試完成後,logcat仍然在執行,測試時須要注意

 若是測試monkey碰到crash或者anr(程序強制性退出或不響應)現象時,在抓取log的同時須要提供traces.txt,

 步驟以下:{ adb pull /data/anr/traces.txt .}

1. 測試版本須要具有root權限

 2. 進入data/anr目錄下面

 3. 將traces.txt文件拷貝到TF卡中,而後拷貝出來發給軟件分析便可  eg. trace view

5、保存monkey log以及手機log到sdcard

1、首先在cmd或終端中輸入adb shell

2、再執行monkey,好比

  monkey -p com.android.email --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 100 >/mnt/sdcard/monkey.txt & logcat -v time >/mnt/sdcard/logcat.txt

 NOTE:若是不想生成logcat文件,刪除紅色標記(& logcat -v time >/mnt/sdcard/logcat.txt)中便可

3、終端內打開存放日誌地址,好比

 cd /Users/wuxiao/Documents

 4、拖日誌到電腦上,好比

 adb pull /mnt/sdcard/monkey.txt 

6、手動中止Monkey

adb shell ps(查找進程PID)

adb shell kill pid (殺掉進程)

7、Monkey命令參數介紹

 

分類 參數 含義 備註

 

 

基本

--help 幫助信息  
-v 命令行的每個-v將增長反饋信息的級別
  • Level 0(缺省值)除啓動提示、測試完成和最終結果以外,提供較少信息。eg: adb shell monkey -p com.sankuai.XXX –v 100
  • Level 1提供較爲詳細的測試信息,如逐個發送到Activity的事件。eg: adb shell monkey -p com.sankuai.XXX –v -v 100
  • Level 2提供更加詳細的設置信息,如測試中被選中的或未被選中的Activity。 eg: adb shell monkey -p com.sankuai.XXX –v –v –v 100

 

 

 

事件 

-s 
  • 僞隨機數生成器的seed值
  • 若是用相同的seed值再次運行Monkey,它將生成相同的事件序列
  • Monkey測試1:adb shell monkey -p com.sankuai.XXX –s 10 100
  • Monkey測試2:adb shell monkey -p com.sankuai.XXX –s 10 100
  • 兩次測試的效果是相同的,由於模擬的用戶操做序列(每次操做按照必定的前後順序所組成的一系列操做,即一個序列)是同樣的。
  • 操做序列雖然是隨機生成的,可是隻要咱們指定了相同的Seed值,就能夠保證兩次測試產生的隨機操做序列是徹底相同的,因此這個操做序列僞隨機的
--throttle
  • 在事件之間插入固定延遲。經過這個選項能夠減緩Monkey的執行速度。
  • 若是不指定該選項Monkey將不會被延遲,事件將盡量快地被產成
  • 用於指定用戶操做(即事件)間的時延,單位是毫秒
adb shell monkey -p com.sankuai.XXX –throttle 3000 100

 

 

 

 

 

 

調整百分比 

—pct+{-事件名}

--pct-touch 
調整觸摸事件的百分比
觸摸事件是一個down-up事件,它發生在屏幕上的某單一位置
--pct-motion  調整動做事件的百分比 動做事件由屏幕上某處的一個down事件、一系列的僞隨機事件和一個up事件組成
--pct-trackball  調整軌跡事件的百分比 軌跡事件由一個或幾個隨機的移動組成,有時還伴隨有點擊
--pct-nav 調整「基本」導航事件的百分比 導航事件由來自方向輸入設備的up/down/left/right組成
--pct-majornav 

調整「主要」導航事件的百分比

這些導航事件一般引起圖形界面中的動做,如:5-way鍵盤的中間按鍵、回退按鍵、菜單按鍵
--pct-syskeys  調整「系統」按鍵事件的百分比 這些按鍵一般被保留,由系統使用,如Home、Back、Start Call、End Call及音量控制鍵
--pct-appswitch 調整啓動Activity的百分比 在隨機間隔裏,Monkey將執行一個startActivity()調用,做爲最大程度覆蓋包中所有Activity的一種方法
--pct-anyevent  調整其它類型事件的百分比 它包羅了全部其它類型的事件,如:按鍵、其它不經常使用的設備按鈕等等

 

 

約束限制

-p 
  • 若是用此參數指定了一個或幾個包,Monkey將只容許系統啓動這些包裏的Activity
  • 若是你的應用程序還須要訪問其它包裏的Activity(如 選擇取一個聯繫人),那些包也須要在此同時指定
  • 若是不指定任何包,Monkey將容許系統啓動所有包裏的Activity
  • 要指定多個包,須要使用多個 -p選項,每一個-p選項只能用於一個包
 
-c 
  • 若是用此參數指定了一個或幾個類別,Monkey將只容許系統啓動被這些類別中的某個類別列出的Activity
  • 若是不指定任何類別,Monkey將選擇下列類別中列出的Activity: Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY
要指定多個類別,須要使用多個-c選項,每一個-c選 項只能用於一個類別

 

 

 

 

 

 

 

 

調試






--dbg-no-events

設置此選項,Monkey將執行初始啓動,進入到一個測試Activity,而後不會再進一步生成事件

爲了獲得最佳結果,把它與-v、一個或幾個包約束、以及一個保持Monkey運行30秒或更長時間的非零值聯合起來,從而提供一個環境,能夠監視應用程序所調用的包之間的轉換
--hprof 設置此選項,將在Monkey事件序列以前和以後當即生成profiling報告 這將會在data/misc中生成大文件(~5Mb),因此要當心使用它
--ignore-crashes
  • 一般,當應用程序崩潰或發生任何失控異常時,Monkey將中止運行
  • 若是設置此選項,Monkey將繼續向系統發送事件,直到計數完成
 
--ignore-timeouts
  • 一般,當應用程序發生任何超時錯誤(如「Application Not Responding」對話框)時,Monkey將中止運行
  • 若是設置此選項,Monkey將繼續向系統發送事件,直到計數完成
 
--ignore-security-exceptions
  • 一般,當應用程序發生許可錯誤(如啓動一個須要某些許可的Activity)時,Monkey將中止運行
  • 若是設置了此選項,Monkey將繼續向系統發送事件,直到計數完成
 
--kill-process-after-error
  • 一般,當Monkey因爲一個錯誤而中止時,出錯的應用程序將繼續處於運行狀態
  • 當設置了此選項時,將會通知系統中止發生錯誤的進程。
正常的(成功的)結束,並無中止啓動的進程,設備只是在結束事件以後,簡單地保持在最後的狀態
--monitor-native-crashes
  • 監視並報告Android系統中本地代碼的崩潰事件
  • 若是設置了--kill-process-after-error,系統將中止運行
 
--wait-dbg

中止執行中的Monkey,直到有調試器和它相鏈接

相關文章
相關標籤/搜索