UI / Application Exerciser Monkey

Monkey は、エミュレータまたはデバイス上で動作するプログラムです。クリック、タッチ、ジェスチャーなどのユーザー イベントと、システムレベルのイベントの擬似ランダム ストリームを生成します。Monkey を使用すると、ランダムでありながら再現可能な方法で、開発中のアプリのストレステストを行うことができます。

概要

Monkey は、任意のエミュレータ インスタンスまたはデバイスで実行できるコマンドライン ツールです。ユーザー イベントの擬似ランダム ストリームをシステムに送信し、開発中のアプリケーション ソフトウェアのストレステストとして機能します。

Monkey にはいくつかのオプションがありますが、それらは主に 4 つのカテゴリに分けられます。

  • 試行するイベント数の設定など、基本的な設定オプション。
  • 単一のパッケージへのテストの制限など、操作上の制約。
  • イベントのタイプと頻度。
  • デバッグ オプション。

Monkey を実行すると、イベントを生成してシステムに送信します。また、テスト中のシステムを監視し、以下の 3 つの状況を検出して特別に対処します。

  • Monkey が 1 つ以上の特定のパッケージでのみ実行されるように制限している場合は、他のパッケージへ移動しようとする動作を監視してブロックします。
  • アプリのクラッシュまたは制御不能な例外が発生した場合、Monkey は停止してエラーを報告します。
  • アプリケーション応答なしエラーが発生した場合、Monkey は停止してエラーを報告します。

選択した詳細度レベルに応じて、Monkey の進行状況と生成されたイベントに関するレポートも表示できます。

Monkey の基本的な使用方法

Monkey は、開発マシンのコマンドラインか、スクリプトで起動できます。Monkey はエミュレータ環境またはデバイス環境で動作するので、それぞれの環境のシェルから起動する必要があります。そのためには、各コマンドの前に adb shell を付加するか、シェル内で Monkey コマンドを直接入力します。

基本的な構文は次のとおりです。

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

オプションを指定しなかった場合、Monkey はクワイエット(non-verbose)モードで起動し、ターゲットにインストールされている任意(またはすべて)のパッケージにイベントを送信します。以下に一般的なコマンドラインを示します。このコマンドラインは、アプリを起動して 500 個の擬似ランダム イベントをアプリに送信します。

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

コマンド オプション リファレンス

次の表に、Monkey コマンドラインで使用できるすべてのオプションを示します。

カテゴリ 設定 説明
General --help 簡単な使用ガイドを出力します。
-v コマンドラインで -v を使用するたびに、詳細度レベルが上がります。レベル 0(デフォルト)の場合、起動通知、テスト完了、最終結果以外の情報はほとんど出力されません。レベル 1 の場合、アクティビティに送信される個々のイベントなど、実行中のテストに関するより詳細な情報が出力されます。レベル 2 の場合、テストでアクティビティが選択されているかどうかなど、さらに詳細な設定情報が出力されます。
イベント -s <seed> 疑似乱数生成ツールのシード値。同じシード値を使用して Monkey を再実行すると、同じ一連のイベントが生成されます。
--throttle <milliseconds> イベントとイベントの間に一定の遅延を挿入します。このオプションを使用して、Monkey の動作を遅延させることができます。指定しなかった場合、遅延は発生せず、イベントは可能な限り迅速に生成されます。
--pct-touch <percent> タッチイベントの割合を調整します。タッチイベントとは、画面上の 1 つの場所で行われる DOWN-UP イベントを指します。
--pct-motion <percent> モーション イベントの割合を調整します。モーション イベントとは、画面上のどこかで DOWN イベントが発生し、次に一連の擬似ランダム移動が発生し、最後に UP イベントが発生する流れを指します。
--pct-trackball <percent> トラックボール イベントの割合を調整します。トラックボール イベントとは、1 つ以上のランダムな移動で構成され、場合によってはその後にクリックが続くイベントを指します。
--pct-nav <percent> 「基本的な」ナビゲーション イベントの割合を調整します。ナビゲーション イベントとは、方向入力デバイスから入力された上 / 下 / 左 / 右の移動によって構成されるイベントを指します。
--pct-majornav <percent> 「主要な」ナビゲーション イベントの割合を調整します。「主要な」ナビゲーション イベントとは、一般的に、UI 内でアクションを発生させるナビゲーション イベントを指します(5 方向パッドの中央ボタン、戻るキー、メニューキーなど)。
--pct-syskeys <percent> 「システム」キーイベントの割合を調整します。「システム」キーイベントとは、「ホーム」、「戻る」、「通話を開始」、「通話を終了」、「音量調整」など、通常はシステムが使用するために予約されているキーに関連するイベントを指します。
--pct-appswitch <percent> アクティビティの起動の割合を調整します。Monkey はランダムな間隔で startActivity() 呼び出しを行います。これは、パッケージ内のすべてのアクティビティのカバレッジが最大化されるように行われます。
--pct-anyevent <percent> 他のタイプのイベントの割合を調整します。これは、キーの押下や、デバイス上の使用頻度の低い他のボタンなど、その他のタイプのイベントをすべてカバーします。
制約 -p <allowed-package-name> このオプションで 1 つ以上のパッケージを指定した場合、Monkey はシステムに対して、指定したパッケージ内のアクティビティにのみアクセスすることを許可します。アプリが他のパッケージ内のアクティビティに(連絡先の選択などの目的で)アクセスする必要がある場合、それらのパッケージも同様に指定する必要があります。パッケージを指定しなかった場合、Monkey はシステムに対して、すべてのパッケージ内のアクティビティを起動することを許可します。複数のパッケージを指定するには、-p オプションを複数回(パッケージごとに -p オプションを 1 つずつ)使用します。
-c <main-category> このオプションで 1 つ以上のカテゴリを指定した場合、Monkey はシステムに対して、指定したカテゴリのいずれかでリストされているアクティビティにのみアクセスすることを許可します。カテゴリを指定しなかった場合、Monkey は、Intent.CATEGORY_LAUNCHER または Intent.CATEGORY_MONKEY カテゴリでリストされているアクティビティを選択します。複数のカテゴリを指定するには、-c オプションを複数回(カテゴリごとに -c オプションを 1 つずつ)使用します。
デバッグ --dbg-no-events このオプションを指定した場合、Monkey はテスト アクティビティの初回起動を行いますが、それ以上のイベントは生成しません。最適な結果を得るには、-v オプション、1 つ以上のパッケージ制約オプション、およびゼロ以外の値の throttle オプションを組み合わせて、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 が停止した場合、エラーが発生したアプリは実行中のままになります。このオプションを設定した場合、Monkey はエラーが発生したプロセスを停止するようシステムに指示します。なお、正常に完了(成功)した場合、起動されたプロセスは停止されず、デバイスは単に最終イベント後の最終状態のままになります。
--monitor-native-crashes Android システムのネイティブ コードで発生したクラッシュを監視して報告します。--kill-process-after-error を設定した場合、システムは停止します。
--wait-dbg デバッガが接続されるまで、Monkey の実行を停止します。