開始進行儀器測試

本指南介紹如何使用 Firebase 測試實驗室準備和執行儀器測試。要使用本指南,您需要使用EspressoUI Automator Android 測試框架進行儀器測試(由您或您的團隊編寫)。儀器測試在實體設備上最多可運作 45 分鐘,在虛擬設備上最多可運作 60 分鐘。

在後面的步驟中,您將把應用程式的 APK 和測試的 APK 上傳到 Firebase。

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

Firebase 測試實驗室包含一個函式庫 (testlab-instr-lib),您可以使用該程式庫來處理在執行儀器測試(例如使用Espresso 測試框架編寫的測試)時使用 AndroidX 的ScreenCapture拍攝的任何螢幕截圖。本節介紹如何使用 AndroidX 函式庫建立ScreenCapture物件以及如何使用 testlab-instr-lib 處理它們。

儀器測試運行後,您可以在 Firebase 控制台中查看捕獲的螢幕截圖。

嘗試範例應用程式

下載記事本範例應用程式以嘗試此功能。截取螢幕截圖的功能已合併到 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 )中,加入測試實驗室的依賴項截圖庫。

    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 測試實驗室執行測試時,您可以使用結果。

建立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 控制台的測試實驗室儀表板

  3. 最後,運行測試。

步驟 4. 檢視測試螢幕截圖

測試完成後,您可以查看在 Firebase 控制台中拍攝的任何螢幕截圖。

  1. 「測試」標籤中,選擇已完成的測試,然後按一下「結果」標籤。

  2. 再次選擇您的測試,然後按一下出現的「螢幕截圖」標籤。

(可選)啟用附加測試功能

在使用測試實驗室執行測試之前,您可以在測試中啟用以下功能:

啟用協調器

Android Test Orchestrator是一個獨立運行每個應用程式的儀器測試的工具。測試實驗室始終使用最新版本的 Orchestrator。

若要為測試實驗室啟用 Orchestrator,請在儀器測試設定中按一下其他選項>使用 Orchestrator 執行

使用 Orchestrator 時,您可以獲得以下好處:

  • 沒有共享狀態。每個測試都在自己的檢測實例中運行,因此共享狀態不會跨測試累積。
  • 孤立的崩潰。如果測試崩潰,則只有該檢測被終止,套件中的其他測試仍然可以運行。

請記住,當您使用 Orchestrator 時,每個測試都會執行自己的偵測實例,這表示應用程式進程會在每個測試案例後重新啟動。由此產生的運行時間增加可能會影響您的配額使用情況或計費時間,並可能導致您超出設備的超時限制。如果您減少應用程式的啟動時間,這種開銷就會減少。

若要為 Orchestrator 設定其他選項,請透過environmentVariables欄位指定它們。例如,若要使用clearPackageData ,請在gcloud中使用此選項:

--environment-variables clearPackageData=true

啟用分片

測試分片將一組測試劃分為單獨運行的子組(分片)。測試實驗室使用多個設備自動並行運行每個分片,並在更短的時間內完成整套測試。

例如,如果您建立 N 個分片,則測試實驗室會為您選擇的每個設備啟動 N 個相同的設備,並在每個設備上執行測試的子集。這意味著分片測試案例可能會導致每個裝置執行多個測試。然而,非分片測試案例會導致每個設備執行一次測試。若要了解測試實驗室概念,請參閱關鍵概念

若要在 Firebase 控制台中啟用測試分片,請依照下列步驟操作:

  1. 儀器測試設定中,按一下其他選項

  2. 分片部分中,輸入要運行的分片數量。

測試分片的計費

測試實驗室利用AndroidJUnitRunner 的內建分片機制來實現您的分片。為了避免因旋轉空分片(未分配測試案例的分片)而產生費用,您建立的分片數量應小於測試案例總數。根據每個測試案例運行所需的時間,通常最好為每個分片分配 2-10 個測試案例。

有關計費的更多信息,請閱讀使用情況、配額和計費