The Android Developer Challenge is back! Submit your idea before December 2.

UI / Application Exerciser Monkey

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

概要

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

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

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

Monkey が実行されると、イベントを生成してシステムに送信します。また、テスト中のシステムを監視し、特別に対処する必要がある以下の 3 つの状況が発生していないかを調べます。

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

選択した verbosity レベルに応じて、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 を使用するたびに、verbosity レベルが上がります。Level 0(デフォルト)の場合、起動通知、テスト完了、最終結果以外の情報は提供されません。Level 1 の場合、アクティビティに送信される個々のイベントなど、実行中のテストに関するより詳細な情報が提供されます。Level 2 の場合、テストにおけるアクティビティの選択状況など、より詳細な設定情報が提供されます。
Events -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> 他のタイプのイベントの割合を調整します。これは、キー押下やデバイス上で使用頻度の低い他のボタンなど、その他すべてのイベントに対応します。
Constraints -p <allowed-package-name> この方法で 1 つ以上のパッケージを指定した場合、Monkey はシステムに対して、指定したパッケージ内のアクティビティにのみアクセスすることを許可します。アプリケーションが他のパッケージ内にあるアクティビティにアクセスする必要がある場合(連絡先の選択など)、同様にそれらのパッケージを指定する必要があります。パッケージを指定しなかった場合、Monkey はシステムに対して、すべてのパッケージ内のアクティビティを起動することを許可します。複数のパッケージを指定するには、パッケージごとに 1 つの -p オプションを追加します。
-c <main-category> この方法で 1 つ以上のカテゴリを指定した場合、Monkey はシステムに対して、指定したカテゴリに含まれるアクティビティにのみアクセスすることを許可します。カテゴリを指定しない場合、Monkey によって Intent.CATEGORY_LAUNCHER または Intent.CATEGORY_MONKEY カテゴリにリストされているアクティビティが選択されます。複数のカテゴリを指定するには、カテゴリごとに 1 つの -c オプションを追加します。
Debugging --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 が停止した場合、そのエラーが発生したアプリケーションは実行中のままになります。このオプションを設定すると、エラーが発生したプロセスを停止するようシステムに通知を行います。正常に完了した(成功した)場合、起動したプロセスは停止せず、デバイスの状態は単に最終イベント後の最終ステータスのままになるため、注意してください。
--monitor-native-crashes Android システムのネイティブ コードで発生したクラッシュを監視して報告します。--kill-process-after-error を設定した場合、システムは停止します。
--wait-dbg デバッガーが接続されるまで、Monkey の実行を停止します。