本指南說明如何使用 Firebase Test Lab 準備及執行檢測設備測試。如要使用本指南,您需要檢測設備測試 (由您或團隊編寫),並使用 Espresso 或 UI Automator Android 測試架構。檢測設備測試在實體裝置上最多可執行 45 分鐘,在虛擬裝置上最多可執行 60 分鐘。
在後續步驟中,您會將應用程式的 APK 和測試的 APK 上傳至 Firebase。
(選用) 將螢幕截圖程式庫新增至應用程式
Firebase Test Lab 包含一個程式庫 (testlab-instr-lib),可用於處理您在執行檢測設備測試 (例如使用 Espresso 測試架構編寫的測試) 時,使用 AndroidX 的 ScreenCapture 擷取的任何螢幕截圖。本節說明如何使用 AndroidX 程式庫建立 ScreenCapture 物件,以及如何使用 testlab-instr-lib 處理這些物件。
檢測設備測試執行完畢後,您可以在 Firebase 控制台中查看擷取的螢幕截圖。
試用範例應用程式
下載 NotePad 範例應用程式,試用這項功能。螢幕截圖功能已整合至 NotePad 專案。
步驟 1:在專案中加入螢幕截圖程式庫
在測試專案的根層級設定 Gradle 檔案 (
settings.gradle.kts或settings.gradle) 中,將 Google 的 Maven 存放區新增至每個repositories區段:pluginManagement { repositories { // Add the following line: google() // Google's Maven repository mavenCentral() gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { // Add the following line: google() // Google's Maven repository mavenCentral() } } // ...
在模組 (應用程式層級) Gradle 檔案 (通常是
<project>/<app-module>/build.gradle.kts或<project>/<app-module>/build.gradle) 中,新增 Test Lab 螢幕截圖程式庫的依附元件。dependencies { // ... // Add Test Lab's instrumentation test screenshot library: androidTestImplementation("com.google.firebase:testlab-instr-lib:0.2") // ...
在測試的
AndroidManifest.xml檔案中,於<instrumentation>元素內的中繼資料標記中註冊FirebaseScreenCaptureProcessor。您也可以在 AndroidJUnitRunner 中將處理器指定為引數 (如需操作說明,請參閱 AndroidJUnitRunner 參考文件)。<instrumentation // Check that you have the following line (if not, add it): android:name="androidx.test.runner.AndroidJUnitRunner" // Specifies AndroidJUnitRunner as the test runner android:targetPackage="com.your.package.name"> // Add the following: <meta-data android:name="screenCaptureProcessors" android:value="com.google.firebase.testlab.screenshot.FirebaseScreenCaptureProcessor" /> </instrumentation> ...在應用程式的
AndroidManifest.xml檔案中,於<manifest>元素內新增下列程式碼:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>在
AndroidManifest.xml檔案中,於<manifest>標記內加入下列程式碼,指定應用程式的系統權限。如果您是在 Android 10 (API 級別 29) 以上版本進行測試,請省略WRITE_EXTERNAL_STORAGE權限 (應用程式不需要這項權限,即可在裝置上讀取及寫入螢幕截圖)。<manifest ... > <!-- WRITE_EXTERNAL_STORAGE is not needed on Android 10 (API level 29) or higher. --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/> ... </manifest>
步驟 2:在測試期間擷取螢幕截圖
在測試期間,只要想擷取螢幕截圖,請呼叫 AndroidX 程式庫中的 Screenshot.capture() 方法。這會產生 ScreenCapture 物件。當您在 ScreenCapture 物件上呼叫 process() 時,系統會使用在 AndroidManifest.xml 中註冊的 ScreenCaptureProcessor 處理該物件。請注意,如果未註冊任何處理器,系統會使用 BasicScreenCaptureProcessor。由於您已註冊 FirebaseScreenCaptureProcessor,系統會透過 FirebaseScreenCaptureProcessor 處理螢幕截圖,並在您使用 Firebase Test Lab 執行測試時,提供螢幕截圖和結果。
建立 ScreenCapture 的用途範例:
在 API Build.VERSION_CODES.JELLY_BEAN_MR2 以上版本中擷取全螢幕畫面:
Screenshot.capture()在任何 API 級別擷取活動的
ScreenCapture。請注意,對於低於 Build.VERSION_CODES.JELLY_BEAN_MR2 的裝置,這是唯一的選項。@Rule public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class); ... Screenshot.capture(activityRule.getActivity()); ...
處理 ScreenCapture 的應用實例
透過
FirebaseScreenCaptureProcessor處理ScreenCapture:Screenshot.capture().process();透過指定的
ScreenCaptureProcessor處理ScreenCapture(這樣就不必註冊處理器):Set<ScreenCaptureProcessor> processors = new HashSet<>(); processors.add(new FirebaseScreenCaptureProcessor()); Screenshot.capture().process(processors);設定
ScreenCapture的名稱和格式,並使用已註冊的處理器進行處理:Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
步驟 3:建構並執行測試
建構應用程式和測試 APK (如需操作說明,請參閱「測試應用程式」)。
在 Firebase 控制台中,依序前往「DevOps & Engagement」(開發運作與參與度) > 「Test Lab」 ,然後上傳 APK 檔案。
最後,執行測試。
步驟 4:查看測試螢幕截圖
測試完成後,您可以查看所有擷取的螢幕截圖:
在 Firebase 控制台中,依序前往「DevOps & Engagement」> 「Test Lab」
在「Tests」分頁中選取已完成的測試,然後按一下「Results」分頁標籤。
再次選取測試,然後按一下顯示的「Screenshots」分頁標籤。
(選用) 啟用其他測試功能
您可以在測試中啟用下列功能,然後使用 Test Lab 執行測試:
啟用自動化調度管理工具
Android Test Orchestrator 是一項工具,可獨立執行應用程式的各項檢測設備測試。Test Lab 一律使用最新版本的 Orchestrator。
如要為 Test Lab 啟用 Orchestrator,請在檢測設備測試設定中,依序點選「Additional options」 >「Run with Orchestrator」。
使用 Orchestrator 的好處如下:
- 沒有共用狀態。每項測試都會在自己的檢測執行個體中執行,因此共用狀態不會在測試之間累積。
- 零星當機。如果測試停止運作,只有該檢測作業會終止,套件中的其他測試仍可執行。
請注意,使用 Orchestrator 時,每項測試都會執行自己的檢測作業執行個體,也就是說,應用程式程序會在每個測試案例結束後重新啟動。執行時間增加可能會影響配額用量或計費時間,並可能導致超過裝置的逾時限制。如果縮短應用程式的啟動時間,這項負荷就會減少。
如要為 Orchestrator 設定其他選項,請透過 environmentVariables 欄位指定。舉例來說,如要使用 clearPackageData,請在 gcloud 中使用這個選項:
--environment-variables clearPackageData=true
啟用資料分割
測試資料分割會將一組測試分成多個子群組 (資料分割),並分別獨立執行。Test Lab 會自動使用多部裝置平行執行每個資料分割,並在更短的時間內完成整組測試。
舉例來說,如果您建立 N 個 shard,Test Lab 會為您選取的每個裝置啟動 N 個相同的裝置,並在每個裝置上執行一部分測試。這表示,在每個裝置上,測試案例經過資料分割後,可能會產生多個測試執行。不過,非分區測試案例會導致每部裝置執行一項測試。如要瞭解 Test Lab 概念,請參閱「重要概念」。
如要在 Firebase 控制台中啟用測試 sharding,請按照下列步驟操作:
在檢測設備測試設定中,按一下「Additional options」。
在「Sharding」(資料分割) 區段中,輸入要執行的資料分割數量。
測試 shard 的計費方式
Test Lab 會運用 AndroidJUnitRunner 的內建資料分割機制,實作資料分割。為避免系統收取空白資料分割 (未指派測試案例的資料分割) 的費用,建立的資料分割數量應少於測試案例總數。視每個測試案例的執行時間而定,通常建議為每個 shard 指派 2 到 10 個測試案例。
如要進一步瞭解計費方式,請參閱「用量、配額和計費」。