UI/Application Exerciser Monkey

Monkey 是一個在您模擬器或裝置上執行的程式,會產生使用者事件 (例如點擊、輕觸或手勢) 的偽隨機資料流,以及一些系統層級事件。您可以使用 Monkey,以隨機但可重複的方式,對您開發的應用程式進行壓力測試。

總覽

Monkey 是一款指令列工具,可在任何模擬器執行個體或裝置上執行。此工具可將使用者事件的偽隨機資料流傳送到系統中,以便對您開發的應用程式軟體進行壓力測試。

Monkey 包含若干選項,但主要分為以下四個類別:

  • 基本設定選項,例如設定要嘗試的事件數量。
  • 操作限制,例如限制只對單一套件進行測試。
  • 事件類型和頻率。
  • 偵錯選項。

Monkey 會在執行時產生事件並傳送至系統。此工具也會「監控」測試中的系統,並針對三個情況進行特別處理:

  • 如果您已將 Monkey 限制在一或多個特定套件中執行,Monkey 會監測並封鎖前往任何其他套件的嘗試。
  • 如果您的應用程式當機或收到任何未處理的例外狀況,Monkey 將會停止並回報錯誤。
  • 如果您的應用程式產生「應用程式無回應」錯誤,Monkey 將會停止並回報錯誤。

視您選取的詳細程度等級而定,您也會看到關於 Monkey 進度和目前產生事件的報告。

Monkey 基本用法

您可以使用開發機器的指令列啟動 Monkey,也可以從指令碼中啟動此工具。由於 Monkey 是在模擬器/裝置環境中執行,因此必須從該環境的殼層中啟動。如要執行這項操作,請在每個指令前面加上 adb shell,或直接進入殼層並輸入 Monkey 指令。

基本語法如下:

$ adb shell monkey [options] <event-count>

如果您未指定任何選項,Monkey 會在安靜 (非詳細) 模式下啟動,並將事件傳送到目標上安裝的所有套件。以下是較為常見的指令列,除了會啟動您的應用程式,也會向其傳送 500 個偽隨機事件:

$ adb shell monkey -p your.package.name -v 500

指令選項參考資料

下表列出可在 Monkey 指令列加入的所有選項。

類別 選項 說明
一般 --help 輸出簡易的使用指南。
-v 指令列中的每個 -v 都會增加詳細程度等級。等級 0 (預設) 表示除了啟動通知、測試完成和最終結果以外,幾乎不提供任何其他資訊。等級 1 會在測試執行時提供更多相關詳細資料,例如傳送到您活動的個別事件。等級 2 則會提供更詳細的設定資訊,例如已選取或未選取用於測試的活動。
事件 -s <seed> 偽隨機號碼產生器的種子值。如果使用相同的種子值重新執行 Monkey,則會產生相同的事件序列。
--throttle <milliseconds> 在事件之間插入固定延遲。您可使用此選項來減緩 Monkey 的速度。如未指定,系統就不會延遲,而會盡快產生事件。
--pct-touch <percent> 調整觸控事件的百分比 (觸控事件是螢幕上單一位置的點擊後放開事件)。
--pct-motion <percent> 調整動作事件的百分比 (動作事件包括螢幕上某個位置的點擊事件、一連串偽隨機動作,以及放開事件)。
--pct-trackball <percent> 調整軌跡球事件的百分比 (軌跡球事件包括一或多個隨機動作,有時後面會接著一次點擊)。
--pct-nav <percent> 調整「基本」導覽事件的百分比 (導覽事件包括向上/向下/向左/向右,具體取決於方向輸入裝置的輸入內容)。
--pct-majornav <percent> 調整「主要」導覽事件的百分比 (這些導覽事件通常會引起 UI 中的動作,像是 5 向鍵中的中間按鈕、返回鍵或選單鍵這類 UI)。
--pct-syskeys <percent> 調整「系統」重要事件的百分比 (這些按鍵通常保留供系統使用,例如「首頁」、「返回」、「開始通話」、「結束通話」或「音量控制」)。
--pct-appswitch <percent> 調整活動啟動的百分比。Monkey 會隨機發出一個 startActivity() 呼叫,盡可能提高套件中所有活動的涵蓋範圍。
--pct-anyevent <percent> 調整其他類型事件的百分比。這涵蓋所有其他類型的事件 (例如按鍵操作、裝置上其他不常用的按鈕等)。
限制 -p <allowed-package-name> 如果您依此方式指定一或多個套件,Monkey 將「僅」允許系統造訪這些套件中的活動。如果應用程式必須存取其他套件中的活動 (例如選取聯絡人),您還需要指定這些套件。如果您未指定任何套件,Monkey 將允許系統啟動所有套件中的活動。若要指定多個套件,請多次使用 -p 選項,每個套件對應一個 -p 選項。
-c <main-category> 如果您依此方式指定一或多個類別,Monkey 將「僅」允許系統造訪其中一個指定類別所列的活動。如果您未指定任何類別,Monkey 將選取 Intent.CATEGORY_LAUNCHER 或 Intent.CATEGORY_MONKEY 類別所列的活動。若要指定多個類別,請多次使用 -c 選項,每個類別對應一個 -c 選項。
偵錯 --dbg-no-events 如果指定此選項,Monkey 將在測試活動中執行初始啟動作業,但不會產生任何進一步事件。為獲得最佳結果,請搭配使用 -v、一或多個套件限制,以及非零節流,讓 Monkey 運作 30 秒以上。在這個環境中,您可以監控應用程式叫用的套件轉換操作。
--hprof 如果設定的話,此選項將在 Monkey 事件序列前後立即產生剖析報告。這會導致 data/misc 中產生大型 (約 5 Mb) 檔案,使用時請謹慎小心。如要瞭解如何分析剖析報告,請參閱「分析應用程式效能」。
--ignore-crashes 一般來說,如果應用程式當機或發生任何類型的未處理例外狀況,Monkey 就會停止運作。如果您指定此選項,Monkey 會繼續向系統傳送事件,直到計數完成為止。
--ignore-timeouts 一般來說,如果應用程式發生任何類型的逾時錯誤 (例如顯示「應用程式無回應」對話方塊),Monkey 就會停止運作。如果您指定此選項,Monkey 會繼續向系統傳送事件,直到計數完成為止。
--ignore-security-exceptions 一般來說,如果應用程式發生任何類型的權限錯誤 (例如嘗試啟動需要特定權限的活動),Monkey 就會停止運作。如果您指定此選項,Monkey 會繼續向系統傳送事件,直到計數完成為止。
--kill-process-after-error 一般來說,當 Monkey 因錯誤而停止時,故障的應用程式將保持運行狀態。如果您設定此選項,將會指示系統終止發生錯誤的程序。請注意,在正常 (順利) 完成的情況下,已啟動的程序不會停止,且裝置只會保持在最終事件後的最後狀態。
--monitor-native-crashes 監控並回報 Android 系統原生程式碼發生的當機情形。如果設定了 --kill-process-after-error,系統將會停止運作。
--wait-dbg 停止執行 Monkey,直到附加偵錯工具為止。