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

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

Test Lab で使用可能な gcloud コマンドの全一覧については、Android で gcloud ベータテストを実行する方法をご覧ください。

Firebase プロジェクトの作成

アプリの Firebase プロジェクトがない場合は、Firebase console に移動し、[プロジェクトを作成] をクリックしてプロジェクトを作成します。テストを実行するには、プロジェクトの所有権または編集権限が必要になります。

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

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

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

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

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

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

    gcloud config set project <YOUR-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 beta test android devices list
    
    gcloud Android 端末リスト コマンド出力の最初の列 DEVICE_ID には識別子が表示され、後で端末でのテスト実行にこれを使用できます。OS_VERSION_ID 列には、端末がサポートするオペレーティング システムのバージョンが表示されます。テストする端末 ID を指定しない場合は、TAGS 列に示すデフォルトが使用されます。

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

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

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

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

Robo テストを実行する

インストゥルメンテーション テストがない場合でも、アプリのバグを探すことができます。Robo テストを使用するとアプリのユーザー インターフェースを自動的に確認できます。Robo テストは、アプリのユーザー インターフェースを通してさまざまなパスの静的分析を実行してからアプリをクロールすることによってアプリを動かし、クラッシュなどの問題の可能性がないかどうかを検出します。

まず次のコマンドを実行しましょう。

gcloud beta test android run \
  --type robo \
  --app app-debug-unaligned.apk \
  --device-ids Nexus6,Nexus7 \
  --os-version-ids 19,21 \
  --locales en,fr \
  --orientations portrait,landscape \
  --timeout 90s

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

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

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

次に、gcloud コマンドライン ツールを使用して、指定された Android 端末構成で Notepad アプリの Espresso テストを実行しましょう。ここでは、instrumentation テストタイプを使用して app-debug-test-unaligned.apk でテストを実行します。

    gcloud beta test android run \
      --type instrumentation \
      --app app-debug-unaligned.apk \
      --test app-debug-test-unaligned.apk \
      --device-ids Nexus6,Nexus7 \
      --os-version-ids 19,21 \
      --locales en,fr \
      --orientations portrait,landscape

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

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

テスト結果を分析する

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

コマンドテストの結果

コマンドライン テストの出力には、テスト結果を表示するためのリンクも含まれます。結果の見方について詳しくは、テスト結果を分析する方法をご覧ください。

Test Lab による gcloud コマンドのスクリプトを作成する

シェル スクリプトまたはバッチファイルを使用してモバイルアプリのテストコマンドを自動化することができます。自動化しない場合は gcloud コマンドラインを使用して実行します。次の bash スクリプトの例では、インストゥルメンテーション テストをタイムアウト 2 分で実行し、テストが正常に完了したかどうかを報告します。

if gcloud beta 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 テスト インフラストラクチャのエラーが発生しました。

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