Monkey とは、エミュレーター や端末上で動作し、 クリックやタッチやジェスチャーのようなユーザーイベントや、システムレベルイベントの擬似ランダムストリームを生成します。 Monkey を使って、ランダムかつ再現性のある方法で、開発しているアプリのストレステストを行うことができます。
Monkey とはエミュレータ上や端末上で実行できるコマンドラインツールです。 このツールはユーザーイベントの擬似ランダムストリームをシステムへ送信し、開発しているアプリケーションソフトウェアのストレステストとして動作します。
Monkey にはいくつかのオプションがありますが、それらは主に四つのカテゴリーに分けられます。:
Monkey が実行されると、イベントを生成してそれをシステムへ送信します。 またテスト中のシステムを 監視し、特別に対処する必要がある以下三つの状況が発生していないかを調べます。:
選択した出力レベルに応じて、Monkey の進捗状況と生成されたイベントのリポートも表示されます。
開発用PCでコマンドラインを使うか、またはスクリプト上からMonkey を起動することができます。
Monkey はエミュレーター/端末 環境で動作するため、その環境のシェルからMonkey を起動する必要があります。
各コマンドの前に adb shell
を付けるか、もしくはそのシェルを入力してMonkey コマンドを直接入力することで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> |
タッチイベントの割合を調節します。 (タッチイベントとは、画面上の一つの場所でのダウン-アップイベントのことです。) | |
--pct-motion <percent> |
モーションイベントの割合を調節します。 (モーションイベントは、画面上のどこかで発生したダウンイベント、一連の擬似ランダム移動、アップイベントで構成されます。) | |
--pct-trackball <percent> |
トラックボールイベントの割合を調節します。 (トラックボールイベントは、一つ以上のランダムな移動によって構成されます。場合によっては移動の後にクリックも行われます。) | |
--pct-nav <percent> |
"基本的な" ナビゲーションイベントの割合を調節します。 (ナビゲーションイベントは、方向入力端末から入力された上/下/左/右によって構成されます。) | |
--pct-majornav <percent> |
"主要な" ナビゲーションイベントの割合を調節します。 (これらは、十字キーの中央ボタンやバックキーやメニューキーのような、UI内でアクションを引き起こすナビゲーションイベントのことです。) | |
--pct-syskeys <percent> |
"システム" キーイベントの割合を調節します。 (これらは、ホームやバックやスタートコールやエンドコールやボリューム操作のような、通常はシステムによって使用されるために予約されているキーのことです。) | |
--pct-appswitch <percent> |
アクティビティ起動の割合を調節します。ランダムな間隔で、 Monkey は startActivity() コールを行います。これは、パッケージ内の全てのアクティビティのカバレッジを最大化する方法として行います。 | |
--pct-anyevent <percent> |
他の種類のイベントの割合を調節します。 これは、キー押下や端末上で使用頻度の低い他のボタンなど、その他全てのイベントを網羅します。 | |
Constraints | -p <allowed-package-name> |
この方法で一つ以上のパッケージを指定した場合、Monkey はシステムに対して、このパッケージ内のアクティビティに のみアクセスすることを許可します。 アプリケーションで他のパッケージ内 にあるアクティビティにアクセスする必要がある場合(例えば連絡先を選ぶために)、同様にそれらのパッケージを指定する必要があります。 パッケージを指定しなかった場合、Monkey はシステムに対して、全てのパッケージ内のアクティビティを起動することを許可します。 複数のパッケージを指定するには、 -p オプションを複数回使用します。 — パッケージごとに -p オプションを1つ。 |
-c <main-category> |
この方法で一つ以上のカテゴリーを指定した場合、Monkey はシステムに対して、指定したカテゴリーに含まれるアクティビティに のみアクセスすることを許可します。 カテゴリを指定しなかった場合、Monkey はIntent.CATEGORY_LAUNCHERカテゴリーや Intent.CATEGORY_MONKEYカテゴリーに含まれるアクティビティを選びます。 複数のカテゴリーを指定するには、 -c オプションを複数回使用します。 — カテゴリーごとに -c オプションを1つ。 | |
Debugging | --dbg-no-events |
設定した場合、Monkey はテストアクティビティの初回起動を実行しますが、それ以上イベントは生成しません。
ベストな結果を得るには、-vオプションと -p |
--hprof |
設定した場合、このオプションは一連のMonkeyイベントの直前と直後にプロファイルリポートを生成します。 これはサイズの大きい (~5Mb)ファイルをdata/miscに生成するので、注意して使ってください。 トレースファイルの詳細についてはTraceviewを参照してください。 | |
--ignore-crashes |
通常、アプリケーションがクラッシュしたり制御できない例外が発生したりすると Monkey は停止します。 このオプションを設定した場合、カウントが終了するまでMonkeyはイベントをシステムへ送信し続けます。 | |
--ignore-timeouts |
通常、アプリケーションで"Application Not Responding"ダイアログのようなタイムアウトエラーが発生した場合、Monkeyは停止します。 このオプションを設定した場合、カウントが終了するまでMonkeyはイベントをシステムへ送信し続けます。 | |
--ignore-security-exceptions |
通常、例えばアプリケーションが特定の権限が必要なアクティビティを起動しようとしたなど、アプリケーションで権限エラーが発生した場合、Monkeyは停止します。 このオプションを設定した場合、カウントが終了するまでMonkeyはイベントをシステムへ送信し続けます。 | |
--kill-process-after-error |
通常、エラーが原因でMonkey が停止した場合、そのエラーが発生したアプリケーションは実行されたままになります。 このオプションを設定すると、エラーが発生したプロセスを停止するようシステムへ通知を行います。 正常に(successful) 完了した場合、起動したプロセスは停止せず、端末は最終イベント後の最終ステータスの状態のままになるだけなので注意してください。 | |
--monitor-native-crashes |
Android システムのネイティブコードで発生したクラッシュを監視して報告します。 --kill-process-after-error を設定した場合、システムは停止します。 | |
--wait-dbg |
デバッガーが接続されるまで、 Monkey の実行を停止します。 |