Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

開始使用儀器測試

本指南介紹瞭如何使用 Firebase 測試實驗室準備和運行儀器測試。要使用本指南,你需要一個儀器測試使用的(由你或你的團隊寫的)咖啡UI的Automator 2.0的Android測試框架。儀表的測試可以運行多達上的物理設備45分鐘,高達上60分鐘虛擬設備

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

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

火力地堡測試實驗室包括一個圖書館(testlab-INSTR-LIB),你可以用它來處理你用AndroidX的任何截圖抓屏運行儀器測試,當如使用筆試咖啡測試框架。本節將介紹如何創建ScreenCapture與AndroidX庫,以及如何使用testlab-INSTR-lib的處理它們的對象。

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

試用示例應用

下載記事本示例應用程序試用此功能。截取屏幕截圖的功能已經包含在 NotePad 項目中。

步驟 1. 將屏幕截圖庫添加到您的項目中

  1. 在測試項目的根級別(項目級別)搖籃文件( build.gradle ),加入谷歌的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. 在你的模塊(應用程序級)搖籃文件(通常是app/build.gradle ),添加對測試實驗室截圖庫的依賴性。

    dependencies {
      // ...
      // Add Test Lab's instrumentation test screenshot library:
      androidTestCompile `com.google.firebase:testlab-instr-lib:02`
      // ...
    }
  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()從AndroidX庫方法。這將產生一個ScreenCapture對象。當你調用process()ScreenCapture對象,它就會使用處理後的ScreenCaptureProcessor是在您註冊的AndroidManifest.xml 。需要注意的是BasicScreenCaptureProcessor如果沒有處理器被註冊使用。既然你註冊了FirebaseScreenCaptureProcessor ,您的畫面將通過處理FirebaseScreenCaptureProcessor ,當你運行與火力地堡測試實驗室測試將會為您提供與您的結果。

使用範例創建ScreenCapture

  • 在 API Build.VERSION_CODES.JELLY_BEAN_MR2 及更高版本上進行完整的 ScreenCapture:

    Screenshot.capture()
    
  • 採取ScreenCapture任何API級別的活動。請注意,這是低於 Build.VERSION_CODES.JELLY_BEAN_MR2 的設備的唯一選項。

    @Rule
      public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class);
    ...
    Screenshot.capture(activityRule.getActivity());
    ...
    

處理 ScreenCapture 的示例用例

  • 處理ScreenCapture經由FirebaseScreenCaptureProcessor

    Screenshot.capture().process();
    
  • 處理ScreenCapture通過指定的ScreenCaptureProcessor (這允許跳過註冊處理器):

    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文件到測試實驗室儀表盤的火力地堡控制台。

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

步驟 4. 查看您的測試屏幕截圖

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

  1. 測試選項卡,選擇完成的測試,然後單擊結果選項卡。

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

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

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

啟用 Orchestrator

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

為了使Orchestrator的測試實驗室,在儀器的測試設置,單擊其他選項>與Orchestrator中運行

優點和缺點

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

啟用分片

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

測試分片的工作原理

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

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

  1. 儀器的測試設置,單擊其他選項

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

測試分片計費

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

有關結算的更多信息,請閱讀使用,配額和計費