View a markdown version of this page

Android インストルメンテーションと Device Farm の統合 - AWS Device Farm

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

Android インストルメンテーションと Device Farm の統合

注記

Android インストルメンテーションテストを AWS Device Farm と統合するには、次の手順に従います。Device Farm でのインストルメンテーションテストの使用に関する詳細については、「Android および AWS Device Farm のインストルメンテーション」を参照してください。

Android 計測テストを実行する (コンソール)

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

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

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

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

    ヒント

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

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

  4. [ルールを作成] を選択します。

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

  6. アプリの選択 セクションで、アプリがない場合は Device Farm が提供するサンプルアプリの選択 を選択します。独自のアプリを持ち込む場合は、独自のアプリをアップロードを選択し、APK (.apk ファイル形式) を選択します。

  7. 「テストの設定」の「テストフレームワークの選択」セクションで「計測」を選択し、「ファイルの選択」を選択します。テストを含む APK ファイル (.apk ファイル形式) を参照して選択します。

  8. 「実行環境を選択する」で、カスタム環境でテストを実行するか、標準環境でテストを実行するを選択します。詳細については、「AWS Device Farm でのテスト環境」を参照してください。

  9. カスタム環境を選択した場合は、計測テスト用に入力されたデフォルトのテスト仕様を使用するか、独自のテスト仕様をアップロードを選択して独自のテスト仕様を提供できます。

  10. デバイスの選択 で、デバイスの選択方法を選択します。デバイスプールを使用する を選択して、作成したデバイスの厳選されたコレクションまたはカスタムデバイスプールから選択します。テストを実行する個々のデバイスを選択するデバイスを手動で選択しますデバイス互換性セクションには、選択したプール内のデバイスがアプリと互換性がある数が表示されます。詳細については、「AWS Device Farm でのデバイスサポート」を参照してください。

  11. 実行レベルのプロパティを設定するには、実行設定セクションを更新します。ここでは、以下を実行できます。

    1. (オプション) 実行の完了後に Device Farm にテストレポートを生成するには、「テストレポートの生成」を選択します。このオプションは、カスタムテスト環境でのみ使用できます。Device Farm は、テスト仕様出力に含まれる計測結果からレポートを生成します。独自のテスト仕様をアップロードする場合は、計測結果をテスト仕様の出力に出力してください。

  12. 残りのステップを完了し、実行を開始します。

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

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

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

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

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

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

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

ジョブの結果には、テストレポートタブが含まれます。これを選択すると、テストごとの内訳が表示されます。次のスクリーンショットは、すべての列が表示されたテストレポートタブを示しています。

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

タブには、テストごとに次のフィールドが表示されます。

testName

テスト方法の名前。

testClass

テストクラスの名前。

result

テストの Device Farm の結果。

frameworkResult

計測フレームワークが報告した結果。Device Farm はこの値を正規化されたresultフィールドにマッピングします。

durationSeconds

テストの期間を秒単位で表します。

startTimestamp

テストが開始された時刻。

endTimestamp

テストが終了した時刻。

current

実行時のテストの位置。

numTests

実行中のテストの合計数。

statusCode

テストが報告した計測ステータスコード。

stream

テストの計測出力の人間が読み取れるバージョン。

stackTrace

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

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

表示する列を選択するには、歯車アイコンを選択します。設定では、表示する列を選択し、クラス別のグループをオンまたはオフにすることができます。クラス別のグループ化はデフォルトでオンになっており、テストクラス別にテストをグループ化します。オフにすると、次のスクリーンショットに示すように、すべてのテストのフラットリストが表示されます。

クラス別のグループがオフになっているテストレポートタブには、テストのフラットリストが表示されます。

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

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

テストインサイトを有効にせずに完了した計測ジョブのジョブ結果。

テストレポートを表示する (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 Android Phone", "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 Android Phone", "platform": "ANDROID", "os": "16", "formFactor": "PHONE", "fleetType": "PUBLIC" }, "deviceMinutes": { "total": 1.38, "metered": 0.0, "unmetered": 1.13 }, "videoCapture": true } }

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

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

{ "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: 28.926 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"

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

{ "version": "1.0", "jobArn": "arn:aws:devicefarm:us-west-2:123456789012:job:EXAMPLE-PROJECT/EXAMPLE-RUN/00000", "metrics": { "testsTotal": 3, "testsPassed": 2, "testsFailed": 1, "testsSkipped": 0, "testsErrored": 0, "testsOther": 0, "testsPassedPercentage": 66.67, "totalTestExecutionDurationSeconds": 26.004, "medianTestExecutionDurationSeconds": 1.598 }, "testDetails": [ { "testName": "testConnect", "testClass": "com.example.myapp.GpsConnectInstrumentedTest", "frameworkResult": "PASSED", "result": "PASSED", "durationSeconds": 24.399, "startTimestamp": "2026-08-05T20:38:30.131514Z", "endTimestamp": "2026-08-05T20:38:54.530369Z", "statusCode": 0, "current": 1, "numTests": 3 }, { "testName": "testHistoryOff", "testClass": "com.example.myapp.NotificationHistoryInstrumentedTest", "frameworkResult": "PASSED", "result": "PASSED", "durationSeconds": 1.598, "startTimestamp": "2026-08-05T20:38:54.531765Z", "endTimestamp": "2026-08-05T20:38:56.130032Z", "statusCode": 0, "current": 2, "numTests": 3 }, { "testName": "testConnect", "testClass": "com.example.myapp.WifiConnectInstrumentedTest", "frameworkResult": "FAILED", "result": "FAILED", "durationSeconds": 0.002, "startTimestamp": "2026-08-05T20:38:56.131857Z", "endTimestamp": "2026-08-05T20:38:56.133770Z", "stackTrace": "java.lang.NullPointerException: Attempt to invoke virtual method 'boolean androidx.test.uiautomator.UiDevice.pressHome()' on a null object reference\n\tat com.example.myapp.WifiConnectInstrumentedTest.testConnect(WifiConnectInstrumentedTest.java:93)\n\t...", "stream": "\nError in testConnect(com.example.myapp.WifiConnectInstrumentedTest):\njava.lang.NullPointerException: Attempt to invoke virtual method 'boolean androidx.test.uiautomator.UiDevice.pressHome()' on a null object reference\n\t...", "statusCode": -2, "current": 3, "numTests": 3 } ], "errorMessage": "There was 1 failure:\n1) testConnect(com.example.myapp.WifiConnectInstrumentedTest)\njava.lang.NullPointerException: Attempt to invoke virtual method 'boolean androidx.test.uiautomator.UiDevice.pressHome()' on a null object reference\n\t...\nFAILURES!!!\nTests run: 3, Failures: 1", "instrumentationCode": -1 }

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

version

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

jobArn

ジョブの ARN。

metrics

ジョブの結果を集計します。metrics オブジェクトには、以下のフィールドが含まれています。

testsTotal

ジョブ内のテストの合計数。

testsPassed

合格したテストの数。

testsFailed

失敗したテストの数。

testsSkipped

スキップされたテストの数。

testsErrored

エラーが発生したテストの数。

testsOther

別の結果を持つテストの数。

testsPassedPercentage

合格したテストの割合。

totalTestExecutionDurationSeconds

すべてのテストの合計時間を秒単位で表します。

medianTestExecutionDurationSeconds

テストの期間の中央値。秒単位。

errorMessage

実行に失敗した場合、それらを要約したエラーメッセージ。

instrumentationCode

ジョブの全体的な計測終了コード。

testDetails

テスト結果ごとのリスト。の各エントリには、次のフィールドtestDetailsが含まれます。

testName

テスト方法の名前。

testClass

テストクラスの名前。

result

テストの Device Farm の結果。

frameworkResult

計測フレームワークが報告した結果。Device Farm はこの値を正規化されたresultフィールドにマッピングします。

durationSeconds

テストの期間を秒単位で表します。

startTimestamp

テストが開始された時刻。

endTimestamp

テストが終了した時刻。

current

実行時のテストの位置。

numTests

実行中のテストの合計数。

statusCode

テストが報告した計測ステータスコード。

stream

テストの計測出力の人間が読み取れるバージョン。

stackTrace

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

(オプション) Android インストルメンテーションテストでのスクリーンショットの撮影

Android インストゥルメンテーションインストゥルメンテーションテストの一部としてスクリーンショットを撮ることができます。

スクリーンショットを撮るには、次のいずれかのメソッドを呼び出します:

  • Robotium の場合は、takeScreenShot メソッドを呼び出します (例: solo.takeScreenShot();)。

  • Spoon の場合は、次のような screenshot メソッドを呼び出します:

    Spoon.screenshot(activity, "initial_state"); /* Normal test code... */ Spoon.screenshot(activity, "after_login");

テスト実行中、Device Farm は、デバイス上の次の場所 (存在する場合) からスクリーンショットを撮影し、テストレポートに追加します:

  • /sdcard/robotium-screenshots

  • /sdcard/test-screenshots

  • /sdcard/Download/spoon-screenshots/test-class-name/test-method-name

  • /data/data/application-package-name/app_spoon-screenshots/test-class-name/test-method-name