Google 致力于为黑人社区推动种族平等。查看具体举措

插桩测试使用入门

本指南介绍如何使用 Firebase Test Lab 准备和运行插桩测试。要使用本指南,您需要一个由您或您的团队编写的插桩测试(使用 EspressoUI Automator 2.0 Android 测试框架)。插桩测试在真机设备上的运行时长上限是 45 分钟,而在虚拟设备上是 60 分钟。

在稍后的步骤中,您需要将应用的 APK 和测试的 APK 上传到 Firebase。如需详细了解如何创建测试 APK,请参阅测试您的应用。您还可以下载 NotePad 示例应用

第 1 步:(可选)将屏幕截图库添加到您的应用

Test Lab 提供了一个屏幕截图库,您在自己的应用上运行插桩测试时,可以利用这个库截取屏幕截图。测试完毕后,您可以在 Android Studio 或 Firebase 控制台中查看屏幕截图。

请注意,截取屏幕截图的功能已整合到测试 APK (app-debug-test-unaligned.apk) 和 NotePad 示例应用中。 您在运行 Robo 测试时,系统也会自动截取屏幕截图。

  1. 在 Android Studio 中,打开 Project 视图并右键点击项目名称,然后点击 New > Directory

  2. New Directory 对话框中,输入 aars。这将在您测试项目的根目录中创建一个 aars 目录(作为 app 文件夹的同级目录)。

  3. 复制 cloudtestingscreenshotter_lib.aar,并将其粘贴到 aars 文件夹中。

  4. 在应用的根级(项目级层)build.gradle 文件中,在每个 repositories 块中添加对 aars 文件夹的引用:

    repositories {
        jcenter()
        flatDir {
            dirs '../aars'
        }
    }
    ...
  5. 在模块的顶级目录(对于 NotePad 示例应用,该目录为 app 目录)中,打开 build.gradle 文件,然后将 cloudtestingscreenshotter_lib.aar 依赖项添加到顶级 dependencies 块:

    dependencies {
        // Cloud testing
        androidTestCompile (name:'cloudtestingscreenshotter_lib', ext:'aar')
        // Other dependencies go here
        }
    
  6. 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>
    

在测试中您需要截取屏幕截图的任一点,调用 cloudtestingscreenshotter_lib 库的 ScreenShotter.takeScreenshot 方法,其中第一个参数是一个标签,您可以用它来标识屏幕截图(在以下示例中使用 main_screen_2):

Java

ScreenShotter.takeScreenshot("main_screen_2", this /* activity */);

Kotlin+KTX

ScreenShotter.takeScreenshot("main_screen_2", this /* activity */)

查看屏幕截图

如果您使用 Android Studio 运行测试,那么在测试运行完毕后,您可以比较在测试期间截取的任何屏幕截图,具体方法是在测试结果树中选择一个元素,然后点击查看屏幕截图 (View Screenshots) 查看屏幕截图 选项。

屏幕截图比较屏幕

您可以按如下所示的方式,选择和比较来自不同配置的屏幕截图:

任务 操作
在各个测试作业之间切换。 使用左上角的下拉菜单。

测试用例菜单
在同一测试作业的各个屏幕截图之间切换。 使用右上角的箭头。

屏幕截图切换器
向当前视图中添加更多屏幕截图比较面板。 点击比较

比较
选择一个不同的测试维度(设备类型、屏幕方向、语言区域等)。 从屏幕截图底部的列表中选择一个新的维度成员。

第 2 步:启用可选测试功能

在使用 Test Lab 运行测试之前,您可以在测试中启用以下功能:

启用 Orchestrator

Android Test Orchestrator 工具可以独立运行您的应用的每个插桩测试。Test Lab 始终使用最新版本的 Orchestrator。

如需为 Test Lab 启用 Orchestrator,请在插桩测试设置中点击其他选项 > 使用 Orchestrator 运行

优点和缺点

  • 优点:没有共享状态。每个测试都在自己的插桩实例中运行,因此不会跨多个测试累积共享状态。
  • 优点:崩溃彼此隔离。如果某个测试崩溃,则系统只会终止该测试的插桩实例,您套件中的其他测试仍然可以运行。
  • 缺点:运行时间增加。每个测试都运行自己的插桩实例,这意味着测试过程总体耗时会略微延长一些。如果未勾选该选项,运行时间增加可能会影响您的配额用量或计费时间,并可能导致您达到设备的超时限制

启用分片

测试分片旨在将一组测试划分为多个独立运行的子组(分片)。Test Lab 会使用多个设备自动并行运行各分片,并在更短的时间内完成整个测试集。

测试分片的工作原理

假设您创建了 N 个分片。对于您选择的每个设备,Test Lab 会启动 N 个相同设备,并在每个设备上运行一部分测试。这意味着分片测试用例可能导致每个设备执行多个测试,而非分片测试用例通常会导致每个设备执行一个测试(有关 Test Lab 中关键概念的快速概述,请参阅关键概念)。

您可以在 Firebase 控制台中启用测试分片:

  1. 插桩测试设置中,点击其他选项

  2. 分片部分中,输入要运行的分片数量。

测试分片的结算方式

Test Lab 利用 AndroidJUnitRunner 的内置分片机制来实现您的分片。为避免启动空分片(即没有分配测试用例的分片)产生费用,您创建的分片数量应少于测试用例的总数。根据每个测试用例的运行时长,通常最好为每个分片分配 2-10 个测试用例。

如需详细了解结算信息,请参阅用量、配额和结算