Firebase Summit で発表されたすべての情報をご覧ください。Firebase を使用してアプリ開発を加速し、自信を持ってアプリを実行する方法を紹介しています。詳細

gcloudCLIでテストを開始します

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このガイドでは、 gcloud CLIを使用してインストルメンテーション、Robo、またはゲーム ループのテストを実行する方法について説明します。

Test Lab の Android アプリで使用できるgcloudコマンドの完全なリストについては、 gcloud firebase test androidのリファレンス ドキュメントをご覧ください。

あなたが始める前に

まだ行っていない場合は、 Firebase を Android プロジェクトに追加します

ステップ 1. gcloud CLI を設定する

  1. Google Cloud SDK をダウンロードします。
  2. これには gcloud CLI ツールが含まれます。

  3. インストールが最新であることを確認してください:
    gcloud components update
    
  4. Google アカウント
    gcloud auth login
    
    を使用して gcloud CLI にログインします。
  5. gcloud で Firebase プロジェクトを設定します。ここで、 PROJECT_IDは Firebase プロジェクトの ID です:
    gcloud config set project PROJECT_ID
    

ステップ 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には、デバイスでサポートされているオペレーティング システムのバージョンが含まれています。

    出力例

    gcloud firebase test android models list output

  • models describe : 特定の Android MODEL_IDに関する詳細情報を取得します。

    gcloud firebase test android models describe MODEL_ID
    

    出力には、デバイス モデルのブランド、製造元、OS バージョン、サポートされている API レベル、サポートされているアプリケーション バイナリ インターフェイス (ABI)、リリース日、およびデバイスが物理か仮想かが含まれます。

  • versions list : 現在利用可能な OS バージョンのリストを取得してテストします。

    gcloud firebase test android versions list
    

    コマンド出力の最初の 2 つの列 ( OS_VERSION_IDVERSION ) のいずれかからの識別子を使用して、後で Android OS バージョンに対してテストを実行できます。テスト対象の Android OS バージョンを指定しない場合は、 TAGS列に記載されているデフォルトが使用されます。

    出力例

    gcloud android versions list

  • 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 は、コード カバレッジ レポート ツールのEMMAJaCoCoをサポートしています。いずれかのツールをアプリのビルドに統合している場合、追加の引数を指定して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 でコード カバレッジ レポートを見つけます。

  1. gcloudツールがターミナルのテスト結果テーブルの上に出力した Firebase コンソール リンクを開きます。
  2. そのリンクのリストからテスト実行をクリックして、その実行の詳細ページを開きます。
  3. [テスト結果]をクリックして、その実行のテスト結果を含む Cloud Storage バケットに移動します。
  4. コード カバレッジ レポートを表示するには、 artifacts/coverage.ecを開きます。

テスト結果を分析する

数分後、テスト結果の基本的な概要が gcloud ツールによって出力されます。

Command test results

コマンド ライン テスト実行の出力には、テスト結果を表示するためのリンクも含まれています。これらの結果を解釈する方法の詳細については、 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テスト インフラストラクチャ エラーが発生しました。