このガイドでは、 gcloud CLIを使用してインストルメンテーション、Robo、またはゲーム ループのテストを実行する方法について説明します。
Test Lab の Android アプリで使用できるgcloud
コマンドの完全なリストについては、 gcloud firebase test android
のリファレンス ドキュメントをご覧ください。
あなたが始める前に
まだ行っていない場合は、 Firebase を Android プロジェクトに追加します。
ステップ 1. gcloud CLI を設定する
- Google Cloud SDK をダウンロードします。
- インストールが最新であることを確認してください:
gcloud components update
- Google アカウント
gcloud auth login
を使用して gcloud CLI にログインします。 - gcloud で Firebase プロジェクトを設定します。ここで、 PROJECT_IDは Firebase プロジェクトの ID です:
gcloud config set project PROJECT_ID
これには gcloud CLI ツールが含まれます。
ステップ 2. 利用可能なテスト デバイスを確認する
次の gcloud コマンドを使用して、テストに使用できるテスト デバイスとロケールを表示します。
オプションとして、サンプルのメモ帳アプリをダウンロードして、コマンドの実行をすぐに開始することもできます。 NotePad/app/build/outputs/apk/
にあるバイナリ ファイルapp-debug-unaligned.apk
とインストルメンテーション テスト ファイルapp-debug-test-unaligned.apk
を使用します。
models list
: テストできる Android デバイスの現在のリストを取得します。gcloud firebase test android models list
コマンド出力:
- 列
MODEL_ID
には、デバイス モデルでテストを実行するために後で使用できる識別子が含まれています。 - 列
OS_VERSION_ID
には、デバイスでサポートされているオペレーティング システムのバージョンが含まれています。
出力例
- 列
models describe
: 特定の AndroidMODEL_ID
に関する詳細情報を取得します。gcloud firebase test android models describe MODEL_ID
出力には、デバイス モデルのブランド、製造元、OS バージョン、サポートされている API レベル、サポートされているアプリケーション バイナリ インターフェイス (ABI)、リリース日、およびデバイスが物理か仮想かが含まれます。
versions list
: 現在利用可能な OS バージョンのリストを取得してテストします。gcloud firebase test android versions list
コマンド出力の最初の 2 つの列 (
OS_VERSION_ID
とVERSION
) のいずれかからの識別子を使用して、後で Android OS バージョンに対してテストを実行できます。テスト対象の Android OS バージョンを指定しない場合は、TAGS
列に記載されているデフォルトが使用されます。出力例
locales list
: テストに使用できるロケールの現在のリストを取得します。gcloud firebase test android versions list
コマンド出力の最初の列
LOCALE
には、後でロケールに対してテストを実行するために使用できる識別子が含まれています。テストするロケールを指定しない場合、英語がデフォルトのロケールとして使用されます。
テストの実行
アプリのテストに使用できるデバイス モデル、ロケール、OS バージョンの範囲がわかったので、 gcloud firebase test android run
コマンドと--device
フラグを使用してデバイスを指定し、Robo テストまたはインストルメンテーション テストを実行できます。
ロボテストの実行
インストルメンテーション テストがなくても、アプリのバグを探すことができます。 Robo テストを使用して、アプリのユーザー インターフェースの自動レビューを実行します。 Robo テストは、アプリのユーザー インターフェイスを介してさまざまなパスの静的分析を実行し、アプリをクロールしてクラッシュやその他の潜在的な問題を見つけることで、アプリをテストします。
例のコマンドを実行することから始めましょう。
gcloud firebase test android run \ --type robo \ --app app-debug-unaligned.apk \ --device model=Nexus6,version=21,locale=en,orientation=portrait \ --device model=Nexus7,version=19,locale=fr,orientation=landscape \ --timeout 90s
--type
値が指定されていない場合、 --type --type robo
パラメータは暗黙的です。 gcloud help firebase test android run
と入力すると、テストを実行するためのコマンド ライン オプションの完全なセットを確認できます。これらすべての引数をコマンド ラインで指定する代わりに、必要に応じて YAML 形式の引数ファイルで引数を指定できます。この機能の使用方法については、 gcloud topic arg-files
を実行してください。
Robo テストのテスト結果を調査する方法については、 「テスト結果を分析する」セクションを参照してください。
インストルメンテーション テストの実行
gcloud
コマンドライン ツールを使用して、指定した Android デバイス構成でメモ帳アプリのEspressoテストを実行します。次のように、 instrumentation
テスト タイプを使用してapp-debug-test-unaligned.apk
テストを実行します。
gcloud firebase test android run \ --type instrumentation \ --app app-debug-unaligned.apk \ --test app-debug-test-unaligned.apk \ --device model=Nexus6,version=21,locale=en,orientation=portrait \ --device model=Nexus7,version=19,locale=fr,orientation=landscape
テスト APK が--test
で指定されている場合、 --type instrumentation
パラメータは暗黙的です。これらすべての引数をコマンド ラインで指定する代わりに、必要に応じて YAML 形式の引数ファイルで引数を指定できます。この機能の使用方法については、 gcloud topic arg-files
を実行してください。
gcloud CLI はAndroid Test Orchestratorをサポートしています。 Orchestrator には AndroidJUnitRunner v1.1 以降が必要です。有効にするには、 gcloud firebase test android run
を--use-orchestrator
フラグ。無効にするには、 --no-use-orchestrator
フラグを使用します。
上に示していない追加のフラグを使用して、Test Lab がインストルメンテーション テストを実行する方法を制御することもできます。たとえば、 --test-targets
フラグを使用して、テスト APK で使用される単一のクラスまたはクラス メソッドをテストできます。 --num-flaky-test-attempts
フラグを使用して、失敗したテストが実際に不安定であったかどうかを確認することもできます。何らかの理由で失敗します。詳細については、 gcloud firebase test android runをご覧ください。
インストルメンテーション テストのコード カバレッジ レポート
Test Lab は、コード カバレッジ レポート ツールのEMMAとJaCoCoをサポートしています。いずれかのツールをアプリのビルドに統合している場合、追加の引数を指定してgcloud firebase test android run
を実行すると、Test Lab テストのコード カバレッジ レポートを取得できます。 Android Test Orchestrator が有効になっていない場合は、次を使用します。
gcloud firebase test android run \ --type instrumentation \ --app your-app.apk \ --test your-app-test.apk \ --device model=TestDevice,version=AndroidVersion \ --environment-variables coverage=true,coverageFile="/sdcard/Download/coverage.ec" \ --directories-to-pull /sdcard/Download
Android Test Orchestrator を使用しながらコード カバレッジ レポートを生成する場合は、次のように環境変数を変更します。
gcloud firebase test android run \ --type instrumentation \ --app your-app.apk \ --test your-app-test.apk \ --device model=TestDevice,version=AndroidVersion \ --environment-variables clearPackageData=true,coverage=true,coverageFilePath="/sdcard/Download/" \ --directories-to-pull /sdcard/Download
Test Lab がテストの実行を終了したら、Google Cloud Storage でコード カバレッジ レポートを見つけます。
-
gcloud
ツールがターミナルのテスト結果テーブルの上に出力した Firebase コンソール リンクを開きます。 - そのリンクのリストからテスト実行をクリックして、その実行の詳細ページを開きます。
- [テスト結果]をクリックして、その実行のテスト結果を含む Cloud Storage バケットに移動します。
- コード カバレッジ レポートを表示するには、
artifacts/coverage.ec
を開きます。
テスト結果を分析する
数分後、テスト結果の基本的な概要が gcloud ツールによって出力されます。
コマンド ライン テスト実行の出力には、テスト結果を表示するためのリンクも含まれています。これらの結果を解釈する方法の詳細については、 Firebase Test Lab for Android の結果の分析を参照してください。
Robo テストによるカスタム ログインとテキスト入力
--no-auto-google-login
パラメーターを使用しない限り、Robo テストは、認証に Google アカウントを使用するサインイン画面を自動的に完了します。また、提供したテスト アカウント資格情報を使用して、カスタム ログイン画面を完成させることもできます。このパラメーターを使用して、アプリで使用される他のテキスト フィールドにカスタム入力テキストを提供することもできます。
アプリのテキスト フィールドを完成させるには、 --robo-directives
パラメータを使用して、 key-value
のペアのコンマ区切りのリストを指定します。ここで、 key
はターゲット UI 要素の Android リソース名で、 value
はテキスト文字列です。 .このフラグを使用して、特定の UI 要素 (「ログアウト」ボタンなど) を無視するように Robo に指示することもできます。 EditText
フィールドはサポートされていますが、 WebView
UI 要素のテキスト フィールドはサポートされていません。
たとえば、カスタム ログインに次のパラメータを使用できます。
--robo-directives username_resource=username,password_resource=password
利用可能なコマンドとフラグ
Test Lab gcloud CLI には、さまざまな仕様でテストを実行できるいくつかのコマンドとフラグが用意されています。
Android Test Orchestrator フラグ: Orchestratorを有効にするためのフラグです。Orchestrator は、
Instrumentation
の独自の呼び出しでアプリの各テストを実行できるツールです。 Test Lab は常に最新バージョンの Orchestrator を実行します。ゲーム ループ テスト フラグ: ゲーム アプリでプレーヤーのアクションをシミュレートする「デモ モード」を有効にして制御する構成フラグのセット。 Test Lab でゲーム ループ テストを実行する方法については、こちらをご覧ください。
Uniform Sharding フラグ(ベータ版) : テスト ケースを均等に分散するシャードの数を指定するフラグ。シャードは別々のデバイスで並行して実行されます。
手動シャーディング フラグ(ベータ版) : シャード (テスト ケースのグループ) で実行するパッケージ、クラス、および/またはテスト ケースのグループを指定するフラグ。シャードは別々のデバイスで並行して実行されます。
ネットワーク トラフィック プロファイル フラグ(ベータ版) : テストで物理デバイスで使用するネットワーク プロファイルを指定するフラグ。ネットワーク プロファイルは、さまざまなネットワーク条件をエミュレートし、信頼できないネットワークや予測できないネットワークでアプリのパフォーマンスをテストできるようにします。
Test Lab を使用した gcloud コマンドのスクリプト作成
シェル スクリプトまたはバッチ ファイルを使用して、gcloud コマンドラインを使用して実行するモバイル アプリのテスト コマンドを自動化できます。次の bash スクリプトの例では、インストルメンテーション テストを 2 分間のタイムアウトで実行し、テストの実行が正常に完了したかどうかを報告します。
if gcloud firebase test android run --app my-app.apk --test my-test.apk --timeout 2m then echo "Test matrix successfully finished" else echo "Test matrix exited abnormally with non-zero exit code: " $? fi
スクリプト終了コード
Test Lab には、スクリプトまたはバッチ ファイルを使用して実行したテストの結果をよりよく理解するために使用できるいくつかの終了コードが用意されています。
Test Lab のスクリプト終了コード
終了コード | ノート |
---|---|
0 | すべてのテスト実行に合格しました。 |
1 | 一般障害が発生しました。考えられる原因には、存在しないファイル名または HTTP/ネットワーク エラーが含まれます。 |
2 | 不明なコマンドまたは引数が指定されたため、テストは終了しました。 |
10 | テスト実行内の 1 つ以上のテスト ケース (テストされたクラスまたはクラス メソッド) が合格しませんでした。 |
15 | 予期しないエラーが発生したため、Firebase Test Lab はテスト マトリックスが成功したか失敗したかを判断できませんでした。 |
18 | テスト ディメンションに互換性がないため、このテスト実行のテスト環境はサポートされていません。このエラーは、選択した Android API レベルが選択したデバイス タイプでサポートされていない場合に発生する可能性があります。 |
19 | テスト マトリックスはユーザーによってキャンセルされました。 |
20 | テスト インフラストラクチャ エラーが発生しました。 |