gcloud コマンドラインから Firebase Test Lab for Android を使用する

Firebase Test Lab for Android は、gcloud コマンドライン インターフェース(CLI)との完全な統合を含む、Android アプリをテストするためのクラウドベースのインフラストラクチャを提供します。このドキュメントでは、gcloud コマンドライン インターフェースから Test Lab を使用してテストを開始するために必要なインストールと設定について説明します。

Test Lab で使用可能な gcloud firebase test android コマンドの一覧については、gcloud firebase test android をご覧ください。

Firebase プロジェクトを作成

アプリの Firebase プロジェクトがない場合は、Firebase コンソールで [新規プロジェクトを作成] をクリックして、プロジェクトを作成します。テストを実行するには、プロジェクトの所有権または編集権限が必要です。

Test Lab は、Spark プランと Flame プランに基づいて回数が制限された毎日のテスト実行に使用できます。毎日の割り当て制限なしで Test Lab を使用するには、Firebase Blaze プランにアップグレードする必要があります。

詳細については、Test Lab の割り当てと課金をご覧ください。

ローカル Google Cloud SDK 環境を設定する

  1. 存在しない場合、ローカル システムに Google Cloud SDK をインストールします。

  2. Cloud SDK インストールが最新であり、gcloud firebase コマンドを含むことを確認します。

    gcloud components update
    
  3. 現在の gcloud プロジェクトをプロジェクト ID に設定します。

    gcloud config set project <PROJECT-ID>
    
  4. 認証情報が最新であることを確認します。

    gcloud auth login
    

テスト構成を選択する

この例では、Notepad というシンプルなメモ作成 Android アプリのテストを実行します。

  1. notepad.zipNotePad/app/build/outputs/apk/ ディレクトリにある Notepad アプリのバイナリ APK ファイル(app-debug-unaligned.apk)とそれに対応するインストゥルメンテーション テスト(app-debug-test-unaligned.apk)をダウンロードします。

  2. テストを実行できる Android 端末の最新のリストを取得します。

    
    $ gcloud firebase test android models list
    
    gcloud firebase test android models list の出力 コマンド出力の最初の列 MODEL_ID には、後で特定のモデルでテストを実行する際に使用できる識別子が含まれています。OS_VERSION_ID 列には、端末がサポートするオペレーティング システムのバージョンが表示されます。テストする MODEL_ID を指定しないと、TAGS 列のデフォルト値が使用されます。

  3. firebase test android models describe コマンドを実行して、特定の Android MODEL_ID の情報を確認します。

    
    $ gcloud firebase test android models describe Nexus5
    
    上のコマンドの例では、Nexus5 モデルに関する詳細が表示されます。たとえば、ブランド、製造元、対応の API レベル、モデルが物理か仮想か、などの情報が表示されます。

  4. テストを実行できる Android OS バージョンの最新のリストを取得します。

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

  5. テストに使用可能なロケールの最新のリストを取得します。

    
    $ gcloud firebase test android locales list
    
    コマンド出力の最初の列(LOCALE)には、後でロケールのテストに使用できる ID が表示されます。テストするロケールを指定しない場合は、デフォルトのロケールとして英語が使用されます。数百のロケールがあるので、ここではコマンド出力を掲載しません。

テストを実行する

アプリのテストで使用できる端末モデル、OS のバージョン、ロケールの範囲がわかりました。これらの情報を基に、gcloud firebase test android run コマンドと --device フラグを使用してテスト端末を指定できます。このコマンドとフラグは、Robo テストを使用してアプリを自動的にテストする場合にも、アプリのテスト用に作成したインストゥルメンテーション テストを実行する場合にも使用できます。

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 robo パラメータは暗黙的です。gcloud help firebase test android run を入力すると、テストを実行するためのコマンドライン オプションをすべて表示できます。コマンドラインにすべての引数を指定する代わりに、オプションで YAML 形式の引数ファイルに引数を指定することができます。gcloud topic arg-files を実行すると、この機能の使用方法を確認できます。

Robo テストの結果を調べる方法については、テスト結果を分析する方法についての記事をご覧ください。

インストゥルメンテーション テストを実行する

次に、gcloud コマンドライン ツールを使用して、指定された Android 端末構成で Notepad アプリの 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

--test でテスト APK が指定された場合、--type instrumentation パラメータは暗黙的です。コマンドラインにすべての引数を指定する代わりに、オプションで YAML 形式の引数ファイルに引数を指定することができます。gcloud topic arg-files を実行すると、この機能の使用方法を確認できます。

gcloud CLI のアルファ リリースとベータリリースは Android Test Orchestrator をサポートしています。Orchestrator には AndroidJUnitRunner v1.0 以降が必要です。これを有効にするには、gcloud beta firebase test android run
--use-orchestrator フラグを指定して使用します。無効にするには、--no-use-orchestrator フラグを使用します。

注: 上記以外の追加のフラグを使用して、Test Lab がインストゥルメンテーション テストを実行する方法を制御することもできます。たとえば --test-targets フラグを使用して、テスト APK で使用されたクラスを 1 つだけテストしたり、テスト APK で使用されたクラスのメソッドを 1 つだけテストしたりすることができます。詳しくは、gcloud firebase test android run をご覧ください。

テスト結果を分析する

数分後に gcloud ツールによってテスト結果の基本サマリーが表示されます。

コマンドテストの結果

コマンドライン テストの出力には、テスト結果を表示するためのリンクも含まれます。これらの結果の解釈方法については、Firebase Test Lab for Android の結果を分析するをご覧ください。

Robo テストでのカスタム ログインとテキスト入力

Robo テストでは、--no-auto-google-login パラメータを指定しない限り、Google アカウントのログイン画面に認証情報が自動的に入力されます。カスタム ログイン画面を使用してテスト アカウントの認証情報を入力することもできます。このパラメータを使用すると、アプリの他のテキスト フィールドにカスタム テキストを入力することもできます。

アプリのテキスト フィールドに入力するには、--robo-directives パラメータを使用し、key-value ペアのカンマ区切りリストを指定します。key は、対象 UI 要素の Android リソース名、value はテキスト文字列です。 EditText フィールドはサポートされていますが、WebView UI 要素のテキスト フィールドはサポートされていません。

たとえば、カスタム ログインに次のパラメータを使用できます。

--robo-directives username_resource=username,password_resource=password

ベータ版のコマンドとフラグ

Test Lab gcloud CLI では、いくつかのコマンドとフラグをベータ版として公開しています。

  • ネットワーク トラフィック プロファイル フラグ: テスト中に物理端末で使用するネットワーク プロファイルを指定するフラグです。ネットワーク プロファイルによってさまざまなネットワーク条件がエミュレートされるため、信頼できないネットワークや予測不可能なネットワークでのアプリのパフォーマンスをテストすることができます。

  • ゲーム ループ テスト フラグ: ゲームアプリ内のプレーヤーの操作をシミュレートするために「デモ」モードを有効にして制御するテストタイプと付属の設定フラグです。詳しくは、ゲーム ループ テストをご覧ください。

  • Android Test Orchestrator フラグ: Orchestrator を有効にするためのフラグです。Orchestrator は、インストゥルメンテーションを独自に呼び出すときにアプリのテストをそれぞれ実行できるツールです。詳しくは、Android Test Orchestrator をご覧ください。

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 for Android が判断できませんでした。
18 このテスト実行のテスト環境は、テスト ディメンションに互換性がないためサポートされません。このエラーは、選択した Android API レベルが、選択した端末タイプでサポートされない場合に発生することがあります。
19 ユーザーがテスト マトリックスをキャンセルしました。
20 テスト インフラストラクチャのエラーが発生しました。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。