開始使用檢測設備測試

本指南說明如何使用 Firebase Test Lab 準備及執行檢測設備測試。如要使用本指南,您需要建立採用 EspressoUI Automator Android 測試架構的檢測設備測試 (由您或您的團隊撰寫)。檢測設備測試在實體裝置上最多可執行 45 分鐘,在虛擬裝置上則可執行最多 60 分鐘。

在後續步驟中,您會將應用程式 APK 和測試 APK 上傳至 Firebase。

(選用) 將螢幕截圖程式庫新增至應用程式

Firebase Test Lab 內含程式庫 (testlab-instr-lib),可用於處理在執行檢測設備測試時,使用 AndroidX ScreenCapture 擷取的所有螢幕截圖,例如使用 Espresso 測試架構編寫的測試。 本節說明如何使用 AndroidX 程式庫建立 ScreenCapture 物件,以及如何使用 testlab-instr-lib 處理這些物件。

執行檢測工具測試後,您可以在 Firebase 主控台中查看擷取的螢幕截圖。

試用範例應用程式

下載 NotePad 範例應用程式來試用此功能。螢幕截圖功能已整合至 NotePad 專案。

步驟 1:將螢幕截圖程式庫新增至專案

  1. 在測試專案的「根層級設定」Gradle 檔案 (settings.gradle.ktssettings.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()
        }
    }
    // ...
  2. 模組 (應用程式層級) 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")
      // ...
  3. 在測試的 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>
    ...
    
  4. 在應用程式的 AndroidManifest.xml 檔案中,將下列行新增至 <manifest> 元素:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. 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 級別,擷取 Activity 的 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:建構及執行測試

  1. 建構應用程式並測試 APK (請參閱「測試應用程式」一文瞭解相關操作說明)。

  2. 將 APK 檔案上傳至 Firebase 主控台的 Test Lab 資訊主頁

  3. 最後,請執行測試。

步驟 4:查看測試螢幕截圖

測試完成後,您可以在 Firebase 主控台中查看所有擷取的螢幕截圖。

  1. 在「Tests」分頁中,選取已完成的測試,然後按一下「Results」分頁標籤。

  2. 再次選取測試,然後按一下顯示的「螢幕截圖」分頁標籤。

(選用) 啟用其他測試功能

您可以在測試中啟用下列功能,然後再使用 Test Lab 執行測試:

啟用自動化調度管理工具

Android Test Orchestrator 是一種工具,可個別執行應用程式的每項檢測設備測試。Test Lab 一律使用最新版本的 Orchestrator。

如要為 Test Lab 啟用 Orchestrator,請在檢測測試設定中,依序點選「其他選項」 >「使用 Orchestrator 執行」

使用 Orchestrator 時,您可以享有下列好處:

  • 沒有共用狀態。每項測試都會在自己的檢測作業例項中執行,因此共用狀態不會在測試之間累積。
  • 個別當機問題。如果測試發生異常,系統只會終止該檢測作業,套件中的其他測試仍可正常執行。

請注意,使用 Orchestrator 時,每項測試都會執行自己的檢測作業例項,也就是說,每個測試案例結束後,應用程式程序都會重新啟動。因此,執行時間增加可能會影響配額用量或計費時間,並可能導致您超出裝置的逾時限制。如果您縮短應用程式的啟動時間,這項負擔也會縮短。

如要設定 Orchestrator 的其他選項,請透過 environmentVariables 欄位指定這些選項。例如,如要使用 clearPackageData,請在 gcloud 中使用這個選項:

--environment-variables clearPackageData=true

啟用分割

測試資料分割會將一組測試劃分為可個別獨立執行的子群組 (資料分割)。Test Lab 會自動使用多部裝置平行執行每個資料分割,並在更短的時間內完成整組測試。

舉例來說,如果您建立 N 個分割區,Test Lab 會為您選取的每部裝置啟動 N 個相同的裝置,並在每部裝置上執行部分測試。也就是說,分割的測試案例可能會導致每部裝置執行多個測試。不過,非區塊測試案例會導致每部裝置執行一次測試。如要瞭解 Test Lab 概念,請參閱「重要概念」。

如要在 Firebase 主控台中啟用測試區塊劃分,請按照下列步驟操作:

  1. 在「檢測設備測試設定」中,按一下「其他選項」

  2. 在「分割」部分中,輸入要執行的分割數量。

測試區塊的計費

Test Lab 利用 AndroidJUnitRunner 的內建資料分割機制實作資料分割。如要避免系統針對啟動空白資料分割 (未指派測試案例的資料分割) 收取費用,請建立的資料分割數量不得超過測試案例總數。視每個測試案例的執行時間而定,建議為每個分割區指派 2 到 10 個測試案例。

如要進一步瞭解帳單相關資訊,請參閱「用量、配額和帳單」一文。