Android APP壓力測試-Monkey


壓力測試-Monkey學習

Monkey測試特點

  1. 什么是Monkey test? 如其名,像猴子一樣,雖然什么都不懂,但是可以亂點一通,可以理解為壓力測試。在規定的時間或次數范圍內做任何隨機的操作,隨即操作包括點擊、滑動......
  2. Monkey測試目標:通過模擬用戶隨機操作時間,暴露應用內Crash,降低Crash率
  3. Monkey Test范圍預期:除了一些系統設置,我們希望范圍維持在待測試應用內,另外可以補充一些中斷測試
  4. 只能發現Crash,單復現和解決Crash還是需要靠開發人員
  5. 暴露所有的Crash不太現實,只能在一定程度上降低Crash

一、什么是Monkey

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

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

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

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

 按照選定的不同級別的反饋信息,在Monkey中還可以看到其執行過程報告和生成的事件 

 

二、測試准備

  • Android官網下載android-sdk-windows包,解壓至一個目錄下,無需安裝,如D:\android-sdk-windows;
  • 環境變量配置:Path目錄下添加D:\android-sdk-windows\platform-tools;D:\android-sdk-windows\tools(分號隔開,確定platform-tools和tools文件已下載,確認路徑正確)
  • Monkey test前必須先進入android設備的adb shell(Android SDK環境配置不在此描述,網上有很多)步驟如下:

      1. 開始—>運行—>cmd   

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

      3. 進入手機后,輸入相應的monkey命令即可測試 

三、Monkey的基本命令格式   

基本語法如下:

  1、$ adb shell monkey [options]  

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

 如果不指定options,Monkey將以無反饋模式啟動,並把事件任意發送到安裝在目標環境中的全部包。

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

 2、執行單一apk:

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

 3、執行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 //執行白名單的應用

四、測試Log獲取

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

 adb shell monkey –p com.dianping.XXX  –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

五、保存monkey log以及手機logsdcard

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

二、再執行monkey,比如

  monkey -p com.dianping.XXX --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)中即可

三、終端內打開存放日志地址,比如

 cd /Users/wengyb/Documents

 四、拖日志到電腦上,比如

 adb pull /mnt/sdcard/monkey.txt 

六、手動停止Monkey

adb shell ps(查找進程PID)

adb shell kill pid (殺掉進程)

七、Monkey命令參數介紹

 

分類

參數

含義

備注

 

 

基本

--help

幫助信息

 

-v

命令行的每一個-v將增加反饋信息的級別

  • Level 0(缺省值)除啟動提示、測試完成和最終結果之外,提供較少信息。eg: adb shell monkey -p com.dianping.XXX –v 100
  • Level 1提供較為詳細的測試信息,如逐個發送到Activity的事件。eg: adb shell monkey -p com.dianping.XXX –v -v 100
  • Level 2提供更加詳細的設置信息,如測試中被選中的或未被選中的Activity。 eg: adb shell monkey -p com.dianping.XXX –v –v –v 100

 

 

 

事件 

-s 

  • 偽隨機數生成器的seed值
  • 如果用相同的seed值再次運行Monkey,它將生成相同的事件序列
  • Monkey測試1:adb shell monkey -p com.dianping.XXX –s 10 100
  • Monkey測試2:adb shell monkey -p com.dianping.XXX –s 10 100

兩次測試的效果是相同的,因為模擬的用戶操作序列(每次操作按照一定的先后順序所組成的一系列操作,即一個序列)是一樣的。

操作序列雖然是隨機生成的,但是只要我們指定了相同的Seed值,就可以保證兩次測試產生的隨機操作序列是完全相同的,所以這個操作序列偽隨機的

--throttle

  • 在事件之間插入固定延遲。通過這個選項可以減緩Monkey的執行速度。
  • 如果不指定該選項Monkey將不會被延遲,事件將盡可能快地被產成
  • 用於指定用戶操作(即事件)間的時延,單位是毫秒

adb shell monkey -p com.dianping.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,直到有調試器和它相連接

 

八、Monkey實例測試

Mac下:

1、 通過eclipse啟動一個Android的emulator或者連接真機

 

 

2、 在命令行中輸入:adb devices查看設備連接情況

 

3、 在有設備連接的前提下,在命令行中輸入:adb shell 進入shell界面。如果有多個device的時候,加-s參數指定:adb -s devicename shell

 

4、在其中找到我們需要測試的包名com.dianping.XXX

5、 查看data/data文件夾下的應用程序包(可測試的應用程序包都在這個目錄下面)

ls data/data

如果出現opendir failed,Permission denied 則可用root解決

鍵入 su root

然后鍵入 ls data/data 查看包

 

6、 以com.dianping.XXX 作為對象進行MonkeyTest  命令行》》monkey -p com.dianping.XXX -v 500  其中-p表示對象包 –v 表示事件數量

運行過程中,Emulator/真機中的應用程序在不斷地切換畫面。

 

按照選定的不同級別的反饋信息,在Monkey中還可以看到其執行過程報告和生成的事件。

九、測試用例

monkey -p com.dianping.XXX --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 100 >/mnt/sdcard/monkey.txt

cd /Users/wengyb/Documents

adb pull /mnt/sdcard/monkey.txt 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM