本指南介紹瞭如何使用 Firebase 測試實驗室準備和運行儀器測試。要使用本指南,您需要一個使用Espresso或UI Automator Android 測試框架的儀器測試(由您或您的團隊編寫)。儀器測試在物理設備上最多可運行 45 分鐘,在虛擬設備上最多可運行 60 分鐘。
在後面的步驟中,您需要將應用的 APK 和測試的 APK 上傳到 Firebase。
(可選)將屏幕截圖庫添加到您的應用程序
Firebase 測試實驗室包含一個庫 (testlab-instr-lib),您可以使用它來處理在運行儀器測試時使用 AndroidX 的ScreenCapture截取的任何屏幕截圖,例如使用Espresso 測試框架編寫的測試。本節介紹如何使用 AndroidX 庫創建ScreenCapture
對像以及如何使用 testlab-instr-lib 處理它們。
儀器測試運行後,您可以在 Firebase 控制台中查看捕獲的屏幕截圖。
試用示例應用程序
下載NotePad 示例應用程序以試用此功能。截取屏幕截圖的功能已經集成到 NotePad 項目中。
Step 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 // ... } }
在您的模塊(應用程序級別)Gradle 文件(通常是
app/build.gradle
)中,為測試實驗室屏幕截圖庫添加一個依賴項。dependencies { // ... // Add Test Lab's instrumentation test screenshot library: androidTestImplementation 'com.google.firebase:testlab-instr-lib:0.2' // ... }
在測試的
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> ...
在您應用的
AndroidManifest.xml
文件中,在<manifest>
元素中添加以下行:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
在您的
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 步。構建並運行測試
第 4 步。查看您的測試屏幕截圖
測試完成後,您可以查看在 Firebase 控制台中截取的任何屏幕截圖。
在“測試”選項卡中,選擇已完成的測試,然後單擊“結果”選項卡。
再次選擇您的測試,然後單擊出現的屏幕截圖選項卡。
(可選)啟用其他測試功能
在使用測試實驗室運行測試之前,您可以在測試中啟用以下功能:
啟用協調器
Android Test Orchestrator是一種獨立運行應用程序的每個儀器測試的工具。測試實驗室始終使用最新版本的 Orchestrator。
要啟用 Orchestrator for Test Lab,請在Instrumentation 測試設置中單擊Additional options > Run with Orchestrator 。
使用 Orchestrator 時,您可以從以下方面獲益:
- 沒有共享狀態。每個測試都在其自己的檢測實例中運行,因此共享狀態不會在測試之間累積。
- 孤立的崩潰。如果測試崩潰,只有該儀器被終止,而您套件中的其他測試仍然可以運行。
請記住,當您使用 Orchestrator 時,每個測試都會運行自己的檢測實例,這意味著應用進程會在每個測試用例後重新啟動。由此增加的運行時間可能會影響您的配額使用或計費時間,並可能導致您超出設備的超時限制。如果您減少應用程序的啟動時間,此開銷將會縮短。
要為 Orchestrator 設置其他選項,請通過environmentVariables
字段指定它們。例如,要使用clearPackageData
,請在 gcloud 中使用此選項:
--environment-variables clearPackageData=true
啟用分片
測試分片將一組測試劃分為獨立運行的子組(分片)。 Test Lab 使用多個設備自動並行運行每個分片,並在更短的時間內完成整套測試。
例如,如果您創建 N 個分片,對於您選擇的每個設備,測試實驗室都會啟動 N 個相同的設備並在每個設備上運行測試的子集。這意味著分片測試用例可能導致每個設備執行多個測試。然而,非分片測試用例導致每台設備執行一次測試。要了解測試實驗室概念,請參閱關鍵概念。
要在 Firebase 控制台中啟用測試分片,請執行以下步驟:
在Instrumentation 測試設置中,單擊Additional options 。
在分片部分,輸入要運行的分片數。
測試分片計費
測試實驗室通過利用AndroidJUnitRunner 的內置分片機制來實現您的分片。為避免因啟動空分片(沒有分配測試用例的分片)而被收費,您創建的分片數量應小於測試用例總數。根據每個測試用例的運行時間,通常最好為每個分片分配 2-10 個測試用例。
有關計費的更多信息,請閱讀使用情況、配額和計費。