本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將 Android Instrumentation 與 Device Farm 整合
注意
使用下列指示將 Android 檢測測試與 AWS Device Farm 整合。如需在 Device Farm 中使用檢測測試的詳細資訊,請參閱 適用於 Android 和 AWS Device Farm 的檢測。
執行 Android Instrumentation 測試 (主控台)
使用 Device Farm 主控台上傳您的測試。
-
登入 Device Farm 主控台,網址為 https://https://console.aws.amazon.com/devicefarm
。 -
在導覽窗格中,選擇行動裝置測試,然後選擇專案。
-
在專案清單中,選擇要上傳測試的專案。
提示
您可以使用搜尋列,依名稱篩選專案清單。
若要建立專案,請按照 在 AWS Device Farm 中建立專案 中的說明進行操作。
-
選取建立執行。
-
在選取應用程式和執行類型下,於執行類型區段中,選取 Android 應用程式。
-
在選取應用程式下,在應用程式選取選項區段中,如果您沒有應用程式,請選擇選取 Device Farm 提供的範例應用程式。如果您要使用自己的應用程式,請選取上傳自己的應用程式,然後選擇您的 APK (.apk 檔案格式)。
-
在設定測試下,在選取測試架構區段中,選擇檢測,然後選擇選擇檔案。瀏覽並選擇包含測試的 APK 檔案 (.apk 檔案格式)。
-
在選擇您的執行環境下,選取在自訂環境中執行您的測試,或在我們的標準環境中執行您的測試。如需詳細資訊,請參閱在 AWS Device Farm 中測試環境。
-
如果您選擇自訂環境,您可以使用為檢測測試填入的預設測試規格,或選擇上傳自己的測試規格以提供您自己的測試規格。
-
在選取裝置下,選擇裝置選擇方法。選取使用裝置集區,從您建立的裝置精選集合或自訂裝置集區中進行選擇。選取手動選取裝置以挑選要執行測試的個別裝置。裝置相容性區段顯示所選集區中有多少裝置與您的應用程式相容。如需詳細資訊,請參閱AWS Device Farm 中的裝置支援。
-
若要設定執行層級屬性,請更新執行設定區段。您可以在此執行下列動作:
-
(選用) 若要讓 Device Farm 在執行完成後產生測試報告,請選取產生測試報告。此選項僅適用於自訂測試環境。Device Farm 會從測試規格輸出中包含的檢測結果產生報告。如果您上傳自己的測試規格,請確定它將檢測結果輸出到您的測試規格輸出。
-
-
完成其餘步驟,然後開始執行。
檢視測試報告 (主控台)
登入 Device Farm 主控台,網址為 https://https://console.aws.amazon.com/devicefarm
。 -
在導覽窗格中,選擇行動裝置測試,然後選擇專案。
-
選擇包含您要檢查之執行的專案。
-
選擇已完成的執行以開啟其詳細資訊。
-
選擇其中一個已完成的任務,以開啟該裝置的結果。
啟用測試洞見
任務結果包含測試報告索引標籤。選擇它以查看每個測試的明細。下列螢幕擷取畫面顯示測試報告索引標籤,並顯示所有資料欄。
標籤顯示每個測試的下列欄位:
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 --arnarn: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