開始使用檢測設備測試

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

在後續步驟中,您要上傳應用程式的 APK, 將測試的 APK 新增至 Firebase

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

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

檢測設備測試執行後,即可查看擷取的螢幕截圖 。

試用範例應用程式

下載 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」處理,完成後即可使用 相信您一定能獲得出色的成效。

建立 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());
    ...
    

處理螢幕畫面擷取的應用實例

  • 透過 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. 在「Tests」分頁中,選取已完成的測試。 然後按一下「結果」分頁標籤。

  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 個測試 每個資料分割的案例數量

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