本指南介绍了如何使用 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 。
优点和缺点
启用分片
测试分片将一组测试划分为单独运行的子组(分片)。 Test Lab 使用多个设备自动并行运行每个分片,并在更短的时间内完成整套测试。
测试分片的工作原理
假设您创建了 N 个分片。对于您选择的每个设备,测试实验室都会启动 N 个相同的设备,并在每个设备上运行测试的子集。这意味着分片测试用例可以导致每台设备执行多次测试,这与非分片测试用例不同,非分片测试用例总是导致每台设备执行一次测试(有关测试实验室中关键概念的快速概述,请参阅关键概念)。
您可以在 Firebase 控制台中启用测试分片:
在Instrumentation 测试设置中,单击Additional options 。
在分片部分,输入要运行的分片数。
测试分片计费
测试实验室通过利用AndroidJUnitRunner 的内置分片机制来实现您的分片。为避免因启动空分片(没有分配测试用例的分片)而被收费,您创建的分片数量应小于测试用例总数。根据每个测试用例的运行时间,通常最好为每个分片分配 2-10 个测试用例。
有关计费的更多信息,请阅读使用情况、配额和计费。