Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

開始使用儀器測試

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

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

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

(可選)將屏幕截圖庫添加到您的應用程序

Firebase 測試實驗室包含一個庫 (testlab-instr-lib),您可以使用它來處理在運行儀器測試時使用 AndroidX 的ScreenCapture截取的任何屏幕截圖,例如使用Espresso 測試框架編寫的測試。本節介紹如何使用 AndroidX 庫創建ScreenCapture對像以及如何使用 testlab-instr-lib 處理它們。

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

試用示例應用程序

下載NotePad 示例應用程序以試用此功能。截取屏幕截圖的功能已經集成到 NotePad 項目中。

Step 1. 將截圖庫添加到你的項目中

  1. 在您的測試項目的根級(項目級)Gradle 文件 ( build.gradle ) 中,將 Google 的 Maven 存儲庫添加到每個存儲庫部分:

    buildscript {
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
      }
    
      dependencies {
        // ...
    
        // Check that you have the following line (if not, add it):
        classpath 'com.google.gms:google-services:4.3.8'  // Google Services plugin
      }
    }
    
    allprojects {
      // ...
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
        // ...
      }
    }
  2. 在您的模塊(應用程序級別)Gradle 文件(通常是app/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 及更高版本上獲取完整的 ScreenCapture:

    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 步。構建並運行測試

  1. 構建您的應用並測試 APK(有關說明,請參閱測試您的應用)。

  2. 將 APK 文件上傳到 Firebase 控制台的測試實驗室儀表板

  3. 最後,運行您的測試。

第 4 步。查看您的測試屏幕截圖

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

  1. 在“測試”選項卡中,選擇已完成的測試,然後單擊“結果”選項卡。

  2. 再次選擇您的測試,然後單擊出現的屏幕截圖選項卡。

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

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

啟用協調器

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

要啟用 Orchestrator for Test Lab,請在Instrumentation 測試設置中單擊Additional options > Run with Orchestrator

優點和缺點

  • 好處:沒有共享狀態。每個測試都在其自己的檢測實例中運行,因此共享狀態不會在測試之間累積。
  • 好處:孤立的崩潰。如果測試崩潰,只有該儀器被終止,您套件中的其他測試仍然可以運行。
  • 缺點:運行時間更長。每個測試都運行自己的檢測實例,這意味著測試過程總體上花費的時間稍長。如果不選中,增加的運行時間可能會影響您的配額使用或計費時間,並可能導致您達到設備的超時限制

啟用分片

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

測試分片的工作原理

假設您創建了 N 個分片。對於您選擇的每個設備,測試實驗室都會啟動 N 個相同的設備,並在每個設備上運行測試的子集。這意味著分片測試用例可以導致每台設備執行多次測試,這與非分片測試用例不同,非分片測試用例總是導致每台設備執行一次測試(有關測試實驗室中關鍵概念的快速概述,請參閱關鍵概念)。

您可以在 Firebase 控制台中啟用測試分片:

  1. Instrumentation 測試設置中,單擊Additional options

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

測試分片計費

測試實驗室通過利用AndroidJUnitRunner 的內置分片機制來實現您的分片。為避免因啟動空分片(沒有分配測試用例的分片)而被收費,您創建的分片數量應小於測試用例總數。根據每個測試用例的運行時間,通常最好為每個分片分配 2-10 個測試用例。

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