Google Cloud CLI を使用してテストする

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

ステップ 1: ローカル Google Cloud SDK 環境を構成する

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

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

ステップ 2: テストを実行する

XCTest の実行

  1. 次のコマンドを実行して、テストの .ZIP ファイルをアップロードします(アプリをまだパッケージ化していない場合は、XCTest のパッケージ化をご覧ください)。

    cd FOLDER_WITH_TEST_OUTPUT/Build/Products ; \
    zip -r MyTests.zip Debug-iphoneos YOUR_SCHEME_iphoneosDEPLOYMENT_TARGET-arm64.xctestrun
  2. テスト ディメンションを選択します。

    Test Lab では、さまざまな iOS バージョン、デバイス、画面の向き、ロケールでテストを実行できます。これらの構成は、テストのテスト ディメンションと呼ばれます。各ディメンションのオプション(デバイスの iOS バージョンでサポートされている Xcode バージョンなど)を表示するには、次のコマンド中の dimensionmodelsversionslocales を置き換えて実行します。

    gcloud firebase test ios dimension list

    画面の向きは多少わかりやすく、オプションは portraitlandscape だけです。

    テスト ディメンションのリストを確認し、テストを実行するいくつかの組み合わせを選択します。1 日に実行できる組み合わせ数の上限については、料金プランをご覧ください。

  3. 一連のテスト ディメンションを選択したら、firebase test ios run コマンドを使用して Test Lab でテストを実行できます。テストするテスト ディメンションの組み合わせごとに、個別の --device フラグを含めます。

    gcloud firebase test ios run --test PATH/TO/MyTests.zip \
     --device model=MODEL_ID_1,version=VERSION_ID_1,locale=LOCALE_1,orientation=ORIENTATION_1 \
     --device model=MODEL_ID_2,version=VERSION_ID_2,locale=LOCALE_2,orientation=ORIENTATION_2 \
     etc...

    テストがビルドされた Xcode のバージョンと、Test Lab で使用されるデフォルトの Xcode のバージョンとの間に互換性がない場合、テストが失敗する可能性があります。テストでサポートされる Xcode バージョンを指定するには、--xcode-version フラグを使用します。

    gcloud firebase test ios run --test PATH/TO/MyTests.zip \
     --device model=MODEL_ID_1,version=VERSION_ID_1,locale=LOCALE_1,orientation=ORIENTATION_1 \
     --xcode-version=15

    Firebase コンソールでテスト マトリックスを見つけやすくするために、オプションでテスト マトリックスにラベルを付けるには、次の例に示すように --client-details matrixLabel="<label>" フラグを使用します。

    gcloud beta firebase test ios run --test PATH/TO/MyTests.zip \
      --device model=MODEL_ID_1,version=VERSION_ID_1,locale=LOCALE_1,orientation=ORIENTATION_1 \
      --client-details matrixLabel="my label"

特別なエンタイトルメントのテスト

明示的なアプリ ID を要求するエンタイトルメントをテストするには、--test-special-entitlements フラグを設定します。Test Lab は、特別なエンタイトルメントをサポートするために、新しいバンドル ID を使用してアプリケーションの再署名を行います。そのため、アプリのバンドル ID への直接参照を含むリソースが zip ファイル内に存在しないようにしてください。

サポートされている資格:
  1. プッシュ通知 apns-environment
  2. 個人 VPN com.apple.developer.networking.vpn.api
プッシュ通知

プッシュ通知リクエストの承認では、キー ID C7FD9DJAA8、チーム ID 9CKCGNNUQN とともに非公開の署名鍵を使用して、JSON Web Token を作成できます。生成されたトークンは 1 時間有効で、60 分ごとに更新する必要があります。詳しくは、APNs へのトークンベースの接続の確立に関する説明をご覧ください。

アプリグループ

アプリグループ ID はユニバーサルに一意です。つまり、ユーザーアプリを再署名する際には、Test Lab デベロッパー アカウントに関連付けられているアプリグループ ID のみを使用できます。テストがアプリグループに依存している場合、テストは失敗します。

ゲームループ テストの実行

gcloud beta firebase test ios run コマンドを実行し、次のフラグを使用して実行環境を構成します。

ゲームループ テストのフラグ
--type

必須: 実施する iOS テストのタイプを指定します。テストタイプとして xctest(デフォルト)または game-loop を入力できます。

--app

必須: アプリの IPA ファイルの絶対パス(GCS またはファイルシステム)。このフラグは、ゲームループ テストの場合にのみ有効です。

--scenario-numbers

アプリで実行するループ(シナリオ)。1 つのループ、1 つまたは複数のループ、あるいはループの範囲を入力できます。デフォルトのループは 1 です。

たとえば、--scenario-numbers=1-3,5 はループ 1、2、3、5 を実行します。

--device-model

テストを行う実機(使用可能なデバイスで使用できるデバイスを確認してください)。

--timeout

テストの最大期間。期間を表す整数を秒単位で入力します。より長い時間を指定する場合は、整数と時間単位を入力します。

例:

  • --timeout=200 を指定した場合、開始から 200 秒後にテストを強制終了します。
  • --timeout=1h を指定した場合、開始から 1 時間後にテストを強制終了します。

次のコマンドでは、iPhone 8 Plus でループ 1、4、6、7、8 を実行するゲームループ テストを行います。

gcloud beta firebase test ios run
 --type game-loop --app path/to/my/App.ipa --scenario-numbers 1,4,6-8
 --device-model=iphone8plus

gcloud CLI の詳細については、リファレンス ドキュメントをご覧ください。

ステップ 3(省略可): 今後構築するテストを自動化する

Test Lab を使用して gcloud コマンドをスクリプト化する

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

if gcloud firebase test ios run --test MyTest.zip --timeout 2m
then
    echo "Test matrix successfully finished"
else
    echo "Test matrix exited abnormally with non-zero exit code: " $?
fi

スクリプト終了コード

Test Lab にはいくつかの終了コードが用意されており、スクリプトまたはバッチファイルを使用して実行したテストの結果を詳細に把握できます。

終了コード メモ
0 すべてのテスト実行が成功しました。
1 一般的なエラーが発生しました。ファイル名が存在しないか HTTP エラーやネットワーク エラーの可能性があります。
2 不明なコマンドまたは引数が指定されたため、テストが終了しました。
10 テスト実行内の 1 つ以上のテストケース(テストしたクラスまたはクラスメソッド)が成功しませんでした。
15 テスト マトリックスが成功したのか、または予期しないエラーで失敗したのかを Firebase Test Lab が判断できませんでした。
19 ユーザーがテスト マトリックスをキャンセルしました。
20 テスト インフラストラクチャでエラーが発生しました。

ステップ 4: テスト結果を調査する

テストが開始されると、[テスト結果] ページへのリンクが表示されます。選択した構成の数と、テストに対して設定されているテスト タイムアウト時間によっては、テストの実行に数分かかることがあります。テストが完了すると、テスト結果を確認できます。テスト結果の見方については、Firebase Test Lab の結果の分析をご覧ください。

次のステップ

Google Cloud SDK のドキュメントで、一般提供またはベータ版のテスト オプションを確認する。