開始使用儀器測試

本指南介紹瞭如何使用 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 個測試用例。

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