開始使用檢測設備測試

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

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

(選用) 在應用程式中加入螢幕截圖資料庫

Firebase Test Lab 包含一個程式庫 (testlab-instr-lib),您可以 用於處理您使用 AndroidX 的 螢幕畫面擷取 執行檢測設備測試時,例如使用 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. 在「module (應用程式層級)」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 檔案中,註冊 FirebaseScreenCaptureProcessor <instrumentation> 元素。您也可以將處理器指定為 請改用 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:在測試期間擷取螢幕截圖

在測試中任何您想要擷取螢幕截圖的位置,呼叫 Screenshot.capture() 方法。這會產生 ScreenCapture 物件。 針對 ScreenCapture 物件呼叫 process() 時,系統會處理 使用 ScreenCaptureProcessor 操作 您在 AndroidManifest.xml 中註冊的號碼。請注意, 如果未註冊任何處理方,系統會使用 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 檔案上傳到 Test Lab 資訊主頁 Firebase 控制台。

  3. 最後,請執行測試。

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

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

  1. 在「測驗」分頁中選取已完成的測驗,然後按一下「結果」分頁。

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

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

您可以先在測試中啟用下列功能,再使用 Test Lab

啟用 Orchestrator

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 個資料分割 並在每部裝置上執行部分測試。也就是說 建立資料分割測試案例,可能會在每部裝置上產生多次測試執行。 然而,未經資料分割的測試案例,每 1 個測試案例可執行一次 裝置。如要瞭解 Test Lab 概念,請參閱: 重要概念

如要在 Firebase 控制台中啟用測試資料分割,請按照下列步驟操作:

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

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

測試區塊的計費

Test Lab 利用 AndroidJUnitRunner 的內建功能實作資料分割 資料分割機制。 以免系統針對啟用空白的資料分割 (未指派的資料分割) 收取費用 測試案件), create 應少於測試案例總數。這取決於 建議您安排 2 到 10 個測試 每個資料分割的案例數量

如要進一步瞭解計費方式,請參閱「用量、配額與計費」一文。