View a markdown version of this page

iOS 用 XCTest UI と Device Farm の統合 - AWS Device Farm

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

iOS 用 XCTest UI と Device Farm の統合

Device Farm では、XCTest UI テストフレームワークをサポートしています。中でも、Device Farm では、Objective-C と Swift の両方で記述される XCTest UI テストをサポートしています。

XCTest UI フレームワークは、XCTest 上に構築された iOS 開発での UI テストを可能にします。詳細については、iOS 開発者ライブラリの「ユーザーインターフェイスのテスト」を参照してください。

Device Farm でのテストに関する一般的な情報については、「AWS Device Farm のテストフレームワークと組み込みテスト」を参照してください。

次の手順を使用して、Device Farm を iOS 用の XCTest UI テストフレームワークと統合します。

iOS XCTest UI テストを準備する

XCTEST_UI テストパッケージの .ipa ファイルまたは .zip ファイルをアップロードできます。

.ipa ファイルは、バンドル形式の iOS Runner アプリを含むアプリケーションアーカイブです。追加のファイルを .ipa ファイルに含めることはできません。

.zip ファイルをアップロードする場合、iOS Runner アプリを直接、または .ipa ファイルのいずれかを含めることができます。テスト中に他のファイルを使用する場合は、.zip ファイル内に他のファイルを含めることもできます。例えば、.zip ファイル内に .xctestrun.xcworkspace.xcodeproj などのファイルを含めて、Device Farm で XCUI テストプランを実行できます。テストプランの実行方法の詳しい手順については、XCUI テストタイプのデフォルトのテスト仕様ファイルを参照してください。

オプション 1: XCTest UI .ipa パッケージの作成

yourAppNameUITest-Runner.app バンドルは、テストのためにプロジェクトをビルドするときに Xcode によって生成されます。プロジェクトの Products ディレクトリにあります。

.ipa ファイルを作成するには

  1. Payload と名付けたディレクトリを作成します。

  2. アプリディレクトリを Payload ディレクトリに追加します。

  3. 次に、Payload ディレクトリを .zip ファイルにアーカイブし、ファイル拡張子を .ipa に変更します。

次のフォルダ構造は、my-project-nameUITest-Runner.app という名前のサンプルアプリケーションが .ipa ファイルとしてパッケージ化される方法を示しています。

. └── my-project-nameUITest.ipa └── Payload (directory) └── my-project-nameUITest-Runner.app

オプション 2: XCTest UI .zip パッケージの作成

Device Farm は、完全な XCTest UI テストスイートを実行するための .xctestrun ファイルを自動生成します。Device Farm で独自の .xctestrun ファイルを使用する場合は、.xctestrun ファイルとアプリケーションディレクトリを .zip ファイルに圧縮できます。テストパッケージ用の .ipa ファイルがすでにある場合は、*-Runner.app の代わりにこのファイルを含めることができます。

. └── swift-sample-UI.zip (directory) ├── my-project-nameUITest-Runner.app [OR] my-project-nameUITest.ipa ├── SampleTestPlan_2.xctestrun ├── SampleTestPlan_1.xctestrun └── (any other files)

Device Farm で XCUI テストの Xcode テストプランを実行する場合は、my-project-nameUITest-Runner.app または my-project-nameUITest.ipa ファイルを含む zip と、.xcworkspace または .xcodeproj ファイルを含むテストプランで XCTEST_UI を実行するために必要な xcode ソースコードファイルを作成できます。

.xcodeproj ファイルを使用した zip の例を次に示します。

. └── swift-sample-UI.zip (directory) ├── my-project-nameUITest-Runner.app [OR] my-project-nameUITest.ipa ├── (any directory) └── SampleXcodeProject.xcodeproj ├── Testplan_1.xctestplan ├── Testplan_2.xctestplan └── (any other source code files created by xcode with .xcodeproj)

.xcworkspace ファイルを使用した zip の例を次に示します。

. └──swift-sample-UI.zip (directory) ├── my-project-nameUITest-Runner.app [OR] my-project-nameUITest.ipa └── (any directory) │ ├── SampleXcodeProject.xcodeproj │ ├── Testplan_1.xctestplan │ ├── Testplan_2.xctestplan | └── (any other source code files created by xcode with .xcodeproj) └── SampleWorkspace.xcworkspace └── contents.xcworkspacedata
注記

XCTest UI .zip パッケージ内に「Payload」という名前のディレクトリがないことを確認してください。

iOS XCTest UI テストを実行する (コンソール)

Device Farm コンソールを使用してテストをアップロードします。

  1. https://console.aws.amazon.com/devicefarm で Device Farm コンソールにサインインします。

  2. ナビゲーションペインで、 [モバイルデバイスのテスト] を選択し、そして次に、[プロジェクト] を選択します。

  3. プロジェクトのリストで、テストをアップロードするプロジェクトを選択します。

    ヒント

    検索バーで名前によりプロジェクトリストを絞り込めます。

    プロジェクトを作成するには、「AWS Device Farm でのプロジェクトの作成」の手順に従ってください

  4. [実行を作成] を選択します。

  5. 「アプリと実行タイプの選択」セクションで「iOS アプリ」を選択します。

  6. 「アプリの選択」セクションの「アプリの選択オプション」で、「アプリのアップロード」を選択します。次に、[アプリをアップロード][ファイルを選択] を選択します。

  7. iOS アプリケーションファイルを参照して選択します。このファイルは、.ipa ファイルである必要があります。

    注記

    .ipa ファイルがシミュレーター用ではなく iOS デバイス用に作成されていることを確認します。

  8. [テスト設定][テストフレームワークを選択] セクションで、[XCTest UI] を選択します。次に、[アプリをアップロード][ファイルを選択] を選択します。

  9. iOS XCTest UI テストランナーを含む .ipa ファイルを参照して選択します。

  10. (オプション) 実行レベルのプロパティを設定するには、実行設定セクションを更新します。

    1. 実行の完了後に Device Farm で Test Insights レポートを生成するには、テストレポートの生成を有効にします。このオプションは、カスタムテスト環境でのみ使用できます。

      以下の前提条件が適用されます。

      1. テストでは、Xcode .xcresultバンドルを生成して に書き込む必要があります$DEVICEFARM_DERIVED_DATA_PATH。たとえば、 -derivedDataPath $DEVICEFARM_DERIVED_DATA_PATHを に渡しますxcodebuild。デフォルトの XCTest UI テスト仕様は、デフォルト設定のままにすると、このバンドルを自動的に生成して保存します。

      レポートの表示の詳細については、「」を参照してくださいテストレポートを表示する (コンソール)

  11. 実行作成プロセスの残りのステップを実行します。テストするデバイスを選択し、オプションで追加の設定を指定します。

  12. [実行を作成] を選択します。Device Farm によってテストが実行され、結果がコンソールに表示されます。​

テストレポートを表示する (コンソール)

  1. https://console.aws.amazon.com/devicefarm で Device Farm コンソールにサインインします。

  2. ナビゲーションペインで、 [モバイルデバイスのテスト] を選択し、そして次に、[プロジェクト] を選択します。

  3. 検査する実行を含むプロジェクトを選択します。

  4. 完了した実行を選択して詳細を開きます。

  5. 完了したジョブのいずれかを選択して、そのデバイスの結果を開きます。

テストインサイトが有効になっている

ジョブ結果には、テストレポートタブが含まれます。これを選択すると、テストの合計数、合格と不合格の数、合計テスト実行時間、テスト実行時間の中央値など、テスト結果の概要が表示されます。概要の下に、テストテーブルにテストごとの内訳が表示されます。

完了した XCTest UI ジョブのテストレポートタブの最初の列セット。
完了した XCTest UI ジョブのテストレポートタブの残りの列。

Tests テーブルの各行には、次の列が含まれます。

  • 結果 — テストが成功したか、失敗したか、スキップされたか。

  • テストクラス – テストが属するクラス。

  • テスト名 – テストメソッドの名前。

  • スタックトレース – 失敗したテストの場合、障害のスタックトレースへのリンク。

  • 所要時間 – テストの実行にかかった時間。

  • 開始時刻終了時刻 – テストの開始時刻と終了時刻。

  • フレームワークの結果 – XCTest フレームワークがテストについて報告した結果文字列。

  • テストバンドル – テストが属するテストバンドル。

  • ノード識別子 – テストケースの xcresult ノード識別子。

テストは、名前、クラス、またはステータスで検索できます。表示する列を選択するには、設定アイコンを選択します。設定では、表示する列を選択し、クラス別のグループをオンまたはオフにすることができます。クラス別のグループ化はデフォルトでオンになっており、テストクラス別にテストをグループ化します。次のスクリーンショットに示すように、クラスを展開して個々のテストを表示します。

クラス別にグループ化されたテストを含むテストレポートタブには、各クラスが個々のテストに展開されたことが示されます。

完全なテストレポートを JSON ファイルとしてダウンロードするには、ジョブの詳細の上部にある完全な概要のダウンロードを選択します。

テストインサイトが有効になっていない

ジョブの結果には、スイートログスクリーンショットタブなどの標準のテスト出力とアーティファクトが表示されますが、テストレポートタブは表示されません。テストレポートを生成するには、テストインサイトを有効にして新しい実行をスケジュールします。

テストインサイトを有効にせずに完了した XCTest UI ジョブのジョブ結果。標準タブとテストレポートタブが表示されません。

テストレポートを表示する (AWS CLI)

を実行してジョブ ARN get-jobを指定します。

aws devicefarm get-job --arn arn:aws:devicefarm:us-west-2:123456789012:job:PROJECT_ID/RUN_ID/00000

テストインサイトが有効になっていない

テストインサイトを有効にしなかった場合、レスポンスにはジョブのステータス、結果、カウンター、デバイスなどの標準ジョブフィールドが含まれます。

{ "job": { "arn": "arn:aws:devicefarm:us-west-2:123456789012:job:EXAMPLE-PROJECT/EXAMPLE-RUN/00000", "name": "Example Apple iPhone", "created": "2026-08-05T14:26:56.959000-07:00", "status": "COMPLETED", "result": "PASSED", "counters": { "total": 3, "passed": 3, "failed": 0, "warned": 0, "errored": 0, "stopped": 0, "skipped": 0 }, "message": "Successful test lifecycle of Setup Test", "device": { "arn": "arn:aws:devicefarm:us-west-2::device:EXAMPLEDEVICEID", "name": "Example Apple iPhone", "platform": "IOS", "os": "18", "formFactor": "PHONE", "fleetType": "PUBLIC" }, "deviceMinutes": { "total": 1.38, "metered": 0.0, "unmetered": 1.13 }, "videoCapture": true } }

テストインサイトが有効になっている

テストインサイトを有効にした場合、レスポンスには、テストレポートのステータス、高レベルのメトリクス、詳細レポートへの署名付き URL を含む insights オブジェクトも含まれます。

{ "job": { "arn": "arn:aws:devicefarm:us-west-2:123456789012:job:EXAMPLE-PROJECT/EXAMPLE-RUN/00000", "status": "COMPLETED", "result": "PASSED", "counters": { ... }, "device": { ... }, "deviceMinutes": { ... }, "videoCapture": true, "insights": { "status": "COMPLETED", "testReport": { "message": "Results: 2 Executed | 2 passed, Median test duration: 3.214 seconds.", "metrics": { "testsTotal": 2, "testsPassed": 2, "testsFailed": 0, "testsSkipped": 0, "testsErrored": 0, "testsOther": 0, "testsPassedPercentage": 100.0 }, "testDetailsUrl": "https://EXAMPLE-PRESIGNED-URL" } } } }

testDetailsUrl フィールドは、完全なテストレポート JSON への署名付き URL です。これをダウンロードして、テストごとの内訳を取得します。

curl -o test-report.json "PRESIGNED_URL"

XCTest UI ジョブのテストレポートの例を次に示します。

{ "version": "1.0", "jobArn": "arn:aws:devicefarm:us-west-2:123456789012:job:5e01a8c7-c861-4c0a-b1d5-12345EXAMPLE/a1b2c3d4-e5f6-4a7b-8c9d-67890EXAMPLE/00000", "deviceName": "Apple iPhone 15", "deviceArn": "arn:aws:devicefarm:us-west-2::device:A1B2C3D4E5F60718293A4B5C6D7E8F90", "deviceOsVersion": "17.5", "metrics": { "testsTotal": 3, "testsPassed": 2, "testsFailed": 1, "testsSkipped": 0, "testsErrored": 0, "testsOther": 0, "testsPassedPercentage": 66.67, "totalTestExecutionDurationSeconds": 6.914, "medianTestExecutionDurationSeconds": 2.062 }, "testDetails": [ { "testName": "test_execute()", "testClass": "AlertsTest", "frameworkResult": "Passed", "result": "PASSED", "durationSeconds": 2.062, "startTimestamp": "2026-07-31T16:58:26.646000Z", "endTimestamp": "2026-07-31T16:58:28.708000Z", "testBundle": "AWSDeviceFarmiOSReferenceAppSwiftUITests", "nodeIdentifier": "AlertsTest/test_execute()" }, { "testName": "test_login()", "testClass": "LoginTest", "frameworkResult": "Failed", "result": "FAILED", "durationSeconds": 3.541, "startTimestamp": "2026-07-31T16:58:29.000000Z", "endTimestamp": "2026-07-31T16:58:32.541000Z", "stackTrace": "LoginTest.swift:88: XCTAssertEqual failed: (\"Welcome\") is not equal to (\"Error\")\nLoginTest.swift:91: XCTAssertTrue failed", "testBundle": "AWSDeviceFarmiOSReferenceAppSwiftUITests", "nodeIdentifier": "LoginTest/test_login()" }, { "testName": "test_themeRendering()", "testClass": "ThemeTest", "frameworkResult": "Passed", "result": "PASSED", "durationSeconds": 1.311, "testBundle": "AWSDeviceFarmiOSReferenceAppSwiftUITests", "nodeIdentifier": "ThemeTest/test_themeRendering()", "testArguments": "Dark Appearance, Portrait" } ] }

レポートには、次の最上位フィールドが含まれます。

version, jobArn

レポートスキーマのバージョンとジョブの ARN。

deviceName, deviceArn, deviceOsVersion

ジョブを実行したデバイスの名前と ARN、およびそのオペレーティングシステムのバージョン。

metrics

ジョブの集計結果: テストの合計数 (testsTotal) と、合格 ()、不合格 (testsPassed)、スキップされた (testsFailed)testsSkipped、エラー (testsErrored)、または別の結果 (testsOther)、合格率 ()、合計テスト期間 (testsPassedPercentage)、テスト期間 (totalTestExecutionDurationSeconds) の中央値 ()medianTestExecutionDurationSeconds

の各エントリには、次のフィールドtestDetailsが含まれます。

testName, testClass

テストメソッドとそのテストクラスの名前。

result, frameworkResult

テストの Device Farm 結果、および XCTest フレームワークが報告した結果文字列。Device Farm は正規化されたresultフィールドにマッピングframeworkResultされます。

durationSeconds, startTimestamp, endTimestamp

テストの秒単位の期間、およびテストの開始時刻と終了時刻。

testBundle, nodeIdentifier

テストが属するテストバンドル、およびテストケースの xcresult ノード識別子。

testArguments

パラメータ化されたテスト呼び出しの場合、呼び出しの引数ラベル。

stackTrace

失敗したテストの場合、障害のスタックトレース。