UI/Application Exerciser Monkey

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

總覽

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

Monkey 有幾個選項,但可分為四個主要類別:

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

Monkey 會在執行時產生事件並傳送至系統。此工具也會監控測試中的系統,並尋找對其特別處理的三個條件:

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

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

Monkey 基本用法

您可以使用開發機器的指令列或從指令碼中啟動 Monkey。由於 Monkey 是在模擬器/裝置環境中執行,因此您必須從該環境的殼層中啟動。方法是在每個指令中加上 adb shell,或輸入 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> 調整「主要」導覽事件的百分比。 (通常是引起使用者介面動作的導覽事件,例如 5 向鍵中的中間按鈕、返回鍵或選單鍵)。
--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 中產生大型 (約 5Mb) 檔案,使用時請謹慎小心。如要瞭解如何分析剖析報告,請參閱剖析應用程式效能
--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,直到偵錯工具安裝為止。