APP穩定性測試神器Monkey全解析
Monkey是一個在模擬器或裝置上執行的程式,可生成偽隨機使用者事件(例如點選、輕觸或手勢)流以及很多系統級事件。您可以使用 Monkey 以隨機且可重複的方式對正在開發的應用進行壓力測試。
概 覽
Monkey是一個命令列工具,可以在任何模擬器例項或裝置上執行。它會將偽隨機使用者事件流傳送到系統中,從而對您正在開發的應用軟體進行壓力測試。
Monkey包含許多選項,主要分為以下四個類別:
-
基本配置選項,例如設定要嘗試的事件數。
-
操作限制條件,例如將測試物件限制為單個軟體包。
-
事件型別和頻率。
-
除錯選項。
Monkey在執行時會生成事件並將其傳送到系統。它還會監視被測系統並查詢三種特殊情況:
-
如果您已將 Monkey 限制為在一個或多個特定軟體包中執行,它會監視並阻止轉到任何其他軟體包的嘗試。
-
如果應用崩潰或收到任何未處理的異常,Monkey 會停止並報告錯誤。
-
如果應用生成“應用無響應”錯誤,Monkey 會停止並報告錯誤。
根據您選擇的詳細程度級別,您還將看到有關 Monkey 進度和所生成事件的報告。
Monkey的基本用法
您可以使用開發計算機上的命令列啟動 Monkey,也可以通過指令碼啟動。由於Monkey在模擬器/裝置環境中執行,因此您必須從該環境中通過shell啟動它。為此,您可以在每個命令前面加上 adb shell,或者直接進入 shell 並輸入 Monkey 命令。
基本語法如下:adb shell monkey [options] <event-count>
如果未指定任何選項,Monkey 將以靜默(非詳細)模式啟動,並將事件傳送到目標上安裝的任何(及所有)軟體包。下面是一個更典型的命令列,它會啟動您的應用並向其傳送 500 個偽隨機事件:adb shell monkey -p your.package.name -v 500
命令選項參考
常規
–help
輸出簡單的使用指南。
–v
命令列上的每個 -v 都會增加詳細程度級別。級別 0(預設值)只提供啟動通知、測試完成和最終結果。級別 1 提供有關測試在執行時的更多詳細資訊,例如傳送到您的 Activity 的各個事件。級別 2 提供更詳細的設定資訊,例如已選擇或未選擇用於測試的 Activity。
事件
-s
偽隨機數生成器的種子值。如果您使用相同的種子值重新執行 Monkey,它將會生成相同的事件序列。
-throttle
在事件之間插入固定的延遲時間。您可以使用此選項減慢 Monkey 速度。如果未指定,則不延遲,系統會盡快地生成事件。
-pct-touch
調整輕觸事件所佔百分比。(輕觸事件是指螢幕上的單個位置上的按下/釋放事件。)
-pct-motion
調整動作事件所佔百分比。(動作事件包括螢幕上某個位置的按下事件,一系列偽隨機動作和一個釋放事件。)
-pct-trackball
調整軌跡球事件所佔百分比。(軌跡球事件包括一個或多個隨機動作,有時後跟點選。)
-pct-nav
調整“基本”導航事件所佔百分比。(導航事件包括向上/向下/向左/向右,作為方向輸入裝置的輸入。)
-pct-majornav
調整“主要”導航事件所佔百分比。(這些導航事件通常會導致介面中的操作,例如 5 方向鍵的中間按鈕、返回鍵或選單鍵。)
-pct-syskeys
調整“系統”按鍵事件所佔百分比。(這些按鍵通常預留供系統使用,例如“主螢幕”、“返回”、“發起通話”、“結束通話”或“音量控制元件”。)
-pct-appswitch
調整 Activity 啟動次數所佔百分比。Monkey 會以隨機間隔發起 startActivity() 呼叫,以最大限度地覆蓋軟體包中的所有 Activity。
-pct-anyevent
調整其他型別事件所佔百分比。這包括所有其他型別的事件,例如按鍵、裝置上的其他不太常用的按鈕等等
約束
-p
如果您通過這種方式指定一個或多個軟體包,Monkey 將僅允許系統訪問這些軟體包內的 Activity。如果應用需要訪問其他軟體包中的 Activity(例如選擇聯絡人),您還需要指定這些軟體包。如果未指定任何軟體包,Monkey 將允許系統啟動所有軟體包中的 Activity。如需指定多個軟體包,請多次使用 -p 選項,每個軟體包對應一個 -p 選項。
-c
如果您通過這種方式指定一個或多個類別,Monkey 將僅允許系統訪問其中一個指定類別中所列的 Activity。如果沒有指定任何類別,Monkey 會選擇 Intent.CATEGORY_LAUNCHER 或 Intent.CATEGORY_MONKEY 類別所列的 Activity。要指定多個類別,請多次使用 -c 選項 - 每個類別對應一個 -c 選項。
除錯
-dbg-no-events
指定後,Monkey 將初始啟動到測試 Activity,但不會生成任何其他事件。為了獲得最佳結果,請結合使用 -v、一個或多個軟體包約束條件以及非零限制,以使 Monkey 執行 30 秒或更長時間。這提供了一個環境,您可以在其中監控應用呼叫的軟體包轉換操作。
-hprof
如果設定此選項,則會在 Monkey 事件序列之前和之後立即生成分析報告。這將在 data/misc 下生成大型(約為 5Mb)檔案,因此請謹慎使用。如需瞭解如何分析效能分析報告,請參閱分析應用效能。
-ignore-crashes
通常,當應用崩潰或遇到任何型別的未處理異常時,Monkey 將會停止。如果指定此選項,Monkey 會繼續向系統傳送事件,直到計數完成為止。
-ignore-timeouts
通常,當應用遇到任何型別的超時錯誤(例如“應用無響應”對話方塊)時,Monkey 將會停止。如果指定此選項,Monkey 會繼續向系統傳送事件,直到計數完成為止。
-ignore-security-exceptions
通常,當應用遇到任何型別的許可權錯誤(例如,如果它嘗試啟動需要特定許可權的 Activity)時,Monkey 將會停止。如果指定此選項,Monkey 會繼續向系統傳送事件,直到計數完成為止。
-kill-process-after-error
通常,當 Monkey 因出錯而停止執行時,出現故障的應用將保持執行狀態。設定此選項後,它將會指示系統停止發生錯誤的程序。注意,在正常(成功)完成情況下,已啟動的程序不會停止,並且裝置僅會處於最終事件之後的最後狀態。
-monitor-native-crashes
監視並報告 Android 系統原生程式碼中發生的崩潰。如果設定了 –kill-process-after-error,系統將會停止。
-wait-dbg
阻止 Monkey 執行,直到為其連線了除錯程式。