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 項目中已經包含了截屏功能。

步驟 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 級別獲取 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. 再次選擇您的測試,然後單擊出現的屏幕截圖選項卡。

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

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

啟用 Orchestrator

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

要為測試實驗室啟用 Orchestrator,請在檢測測試設置中單擊其他選項>使用 Orchestrator 運行

優點和缺點

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

啟用分片

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

測試分片的工作原理

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

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

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

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

測試分片計費

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

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