View a markdown version of this page

將 Android Instrumentation 與 Device Farm 整合 - AWS Device Farm

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將 Android Instrumentation 與 Device Farm 整合

注意

使用下列指示將 Android 檢測測試與 AWS Device Farm 整合。如需在 Device Farm 中使用檢測測試的詳細資訊,請參閱 適用於 Android 和 AWS Device Farm 的檢測

執行 Android Instrumentation 測試 (主控台)

使用 Device Farm 主控台上傳您的測試。

  1. 登入 Device Farm 主控台,網址為 https://https://console.aws.amazon.com/devicefarm

  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. 登入 Device Farm 主控台,網址為 https://https://console.aws.amazon.com/devicefarm

  2. 在導覽窗格中,選擇行動裝置測試,然後選擇專案

  3. 選擇包含您要檢查之執行的專案。

  4. 選擇已完成的執行以開啟其詳細資訊。

  5. 選擇其中一個已完成的任務,以開啟該裝置的結果。

啟用測試洞見

任務結果包含測試報告索引標籤。選擇它以查看每個測試的明細。下列螢幕擷取畫面顯示測試報告索引標籤,並顯示所有資料欄。

測試報告索引標籤上完成檢測任務的第一組資料欄。
已完成檢測任務的測試報告索引標籤上的剩餘資料欄。

標籤顯示每個測試的下列欄位:

testName

測試方法的名稱。

testClass

測試類別的名稱。

result

測試的 Device Farm 結果。

frameworkResult

檢測架構報告的結果。Device Farm 會將此值映射至標準化result欄位。

durationSeconds

測試的持續時間,以秒為單位。

startTimestamp

測試開始的時間。

endTimestamp

測試結束的時間。

current

測試在執行中的位置。

numTests

執行中的測試總數。

statusCode

測試報告的檢測狀態碼。

stream

測試檢測輸出的人類可讀取版本。

stackTrace

對於失敗的測試,為失敗的堆疊追蹤。

若要將完整測試報告下載為 JSON 檔案,請選擇任務詳細資訊頂端的下載完整摘要

若要選擇顯示的資料欄,請選擇齒輪圖示。在設定中,您可以選取要顯示的資料欄,並開啟或關閉依類別分組依類別分組預設為開啟,這會依其測試類別分組測試。關閉以查看所有測試的平面清單,如下列螢幕擷取畫面所示。

關閉依類別分組的測試報告索引標籤,顯示一般的測試清單。

未啟用測試洞見

任務結果會顯示標準測試輸出和成品,但沒有測試報告索引標籤。若要產生測試報告,請在啟用測試洞見的情況下排程新的執行。

未啟用測試洞察的已完成檢測任務的任務結果。

檢視測試報告 (AWS CLI)

執行get-job並指定任務 ARN:

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