iOS 向けデベロッパー デバイス プラットフォーム デバイス実行

このガイドでは、gcloud beta device-run CLI を使用して iOS XCTest を実行し、 Google Cloud コンソールで結果を確認する方法について説明します。 Google Cloud アカウントとプロジェクトがあることを前提としています。

device-run CLI を使用するには、 Google Cloudプロジェクト ID を指定する必要があります。コマンドの概要については、gcloud beta device-run をご覧ください。

始める前に

以下の手順は、次の作業が完了していることを前提としています。

  1. Google Cloud プロジェクトを作成済みであること。
  2. クイックスタートに沿って、デベロッパー デバイス プラットフォームを設定します。
  3. ターミナルで gcloud を使用して認証済み。
  4. 一般的な情報については、Device Run の概要を確認しました。
  5. テストをコンパイルして ZIP にパッケージ化した。

ステップ 1. デバイスの種類を選択する

device-run CLI を使用すると、利用可能な実機で iOS テストを実行できます。利用可能なデバイスの完全なリストを表示するには、インタラクティブなデバイス カタログにアクセスするか、次のコマンドを実行します。

gcloud beta device-run devices list

出力例:

ID                MAKE   NAME           MODEL        HARDWARE_TYPE  OS_VERSION  CAPACITY  AVAILABILITY  PRODUCTS
iphonese3-18-4    Apple  iPhone SE 3             iphonese3    PHYSICAL       18.4        NONE      NONE          Automation
iphonese3-26-3    Apple  iPhone SE 3             iphonese3    PHYSICAL       26.3        NONE      NONE          Automation

このリストをフィルタする方法については、デバイス カタログをご覧ください。テスト実行の対象を特定のデバイスにするには、対応する ID(例: iphonese3-18-4)を送信コマンドに追加します。

ステップ 2. XCTest を準備してパッケージ化する

テストを実行する前に、テストをコンパイルし、署名されていることを確認し、コード署名を検証し、結果のアーティファクトを .xctestrun 構成とアプリ テストバンドルを含む ZIP ファイルにパッケージ化する必要があります。

1. 物理 iOS デバイス用のテストをビルドする

Xcode でプロジェクトを開き、テスト用のアプリとテスト ターゲットをビルドします。

  1. アプリ ターゲットとテストランナー ターゲットの両方で、Xcode でコード署名が正しく構成されていること(有効なプロビジョニング プロファイルとデベロッパー ID を指定していること)を確認します。
  2. Xcode([Product] > [Build For] > [Testing])または xcodebuild を使用してテスト用にビルドします。

    ワークスペースの場合:

    xcodebuild build-for-testing \
      -workspace YourProject.xcworkspace \
      -scheme YourScheme \
      -derivedDataPath ./build \
      -destination "generic/platform=iOS"
    

    スタンドアロン プロジェクトの場合:

    xcodebuild build-for-testing \
      -project YourProject.xcodeproj \
      -scheme YourScheme \
      -derivedDataPath ./build \
      -destination "generic/platform=iOS"
    

これにより、ビルド プロダクトが ./build/Build/Products に生成されます。

2. ビルド プロダクトと署名を検証する

ビルド後、アプリケーション、ランナー、.xctestrun マニフェストが ./build/Build/Products/ に生成されたことを確認します。ローカルで署名した場合は、codesign を使用してバンドルの署名を確認できます。

  1. App Bundle を確認します。

    codesign --verify --deep --verbose ./build/Build/Products/Debug-iphoneos/YourApp.app
    

    予想される出力: YourApp.app: valid on disk

  2. XCUITest を実行している場合は、テストランナー バンドルも検証します。

    codesign --verify --deep --verbose ./build/Build/Products/Debug-iphoneos/YourApp-Runner.app
    

    予想される出力: YourApp-Runner.app: valid on disk

3. ZIP アーカイブを作成する

ビルド出力プロダクト フォルダにある Debug-iphoneos ディレクトリと .xctestrun ファイルの両方を 1 つの ZIP アーカイブに圧縮します。

ビルド プロダクト ディレクトリから次のコマンドを実行します。

cd ./build/Build/Products
zip -r MyTests.zip Debug-iphoneos *.xctestrun

これにより、--test フラグで使用できるパッケージ化された MyTests.zip が作成されます。

ステップ 3. XCTest を実行する

次のフラグは必須です。

  • デバイス: --device を使用してデバイスを指定します。--device iphonese3-18-4
  • テスト: --test を使用してテスト zip ファイルを指定します。--test ./MyTests.zip

XCTest を実行するには、gcloud beta device-run sessions submit xctest コマンドを使用します。前の手順でコンパイルしたテスト Zip ファイル(MyTests.zip)を指定する必要があります。

基本的なテスト セッションを実行するには:

gcloud beta device-run sessions submit xctest \
  --device iphonese3-18-4 \
  --test ./MyTests.zip

実行が開始されると、CLI に作成されたセッション ID と、結果が保存される Cloud Storage の宛先が表示されます。

Creating session [session-ee78b0ed] in location [global].
Result files will be stored at [https://console.cloud.google.com/storage/browser/BUCKET_NAME/automation/sessions/session-ee78b0ed/].

Waiting for session [session-ee78b0ed] to complete....

ステップ 4. テスト実行を構成する

次のオプション フラグを使用してテスト実行をカスタマイズできます(ただし、--device フラグのインスタンスが少なくとも 1 つ必要です)。

  • 複数のデバイス: --device フラグを複数回指定して、複数のデバイスで同時に同じテストを実行します。--device iphonese3-18-4 --device iphonese3-26-3 または --device iphonese3-18-4,iphonese3-26-3
  • 追加のアプリ: --additional-apps を使用してテストを開始する前に、1 つ以上の追加の .ipa パッケージをインストールします。 --additional-apps=/path/to/AdditionalApp.ipa
  • カスタム .xctestrun ファイル: --xctestrun-file: --xctestrun-file=/path/to/CustomTests.xctestrun を使用してカスタム構成ファイルを渡します。
  • テストのタイムアウト: 実行時間を制限します。--xctest-timeout=10m(有効な範囲は 1m1h で、デフォルトは 5m です)。
  • ラベル: ユーザー定義のメタデータをセッションに関連付けます。 --labels=env=staging,owner=my-team
  • デバイスにファイルを push する: テスト実行前にアプリデータ コンテナにファイルを push します。 --other-files-to-push=/tmp/data.txt=com.example.app:/Documents/data.txt
  • デバイスからファイルを取得: テスト実行後にアプリデータ コンテナからファイルを取得します。--paths-to-pull=com.example.app:/Documents/output.txt
  • フレーキー テストの再試行: フレーキー テストを再実行する最大試行回数を設定します。--flaky-test-attempts=3(デフォルトは 1 回)。
  • カスタム Cloud Storage バケット: 入力と出力用のカスタム Cloud Storage バケットを指定します。--bucket-name=my-custom-bucket(デフォルトは PROJECT_ID-devicerun)。
  • サイズの大きい ZIP ファイルや IPA ファイルのアップロードには時間がかかるため、Cloud Storage の gs:// パスを使用してファイルを直接参照することで、アップロード時間を短縮できます。

ステップ 5. テスト実行を探索して管理する

次のコマンドを使用して、アクティブな実行を追跡し、過去のセッションを管理できます。

  • セッションの説明: セッションのライブ進行状況または最終結果をクエリします。 gcloud beta device-run sessions describe SESSION_ID --full を追加すると、デバイス割り当て、実行 ID、Cloud Storage アーティファクト パスなどの詳細が表示されます。
  • セッションを一覧表示: 最近の実行を表示します。gcloud beta device-run sessions list --limit=10
  • セッションをキャンセル: 実行中のテスト セッションを停止します。gcloud beta device-run sessions cancel SESSION_ID
  • オペレーションをキャンセル: 保留中またはアクティブなオペレーションを停止します。gcloud beta device-run operations cancel OPERATION_ID

次のステップ

次は、ログを検索して分析します。