使用 Espresso Test Recorder 创建 UI 测试

Espresso Test Recorder 工具允许您为应用创建 UI 测试,而无需编写任何测试代码。通过录制测试场景,您可以录制与设备的交互并添加断言以验证应用特定快照中的 UI 元素。然后,Espresso Test Recorder 会获取保存的录制内容并自动生成相应的 UI 测试,您可以运行该测试来测试您的应用。

Espresso Test Recorder 基于 Espresso 测试框架(AndroidX Test 中的一个 API)编写测试。Espresso API 鼓励您根据用户操作创建简洁可靠的 UI 测试。通过陈述期望、交互和断言,而无需直接访问底层应用的活动和视图,此结构可防止测试不稳定并优化测试运行速度。

关闭测试设备上的动画

在使用 Espresso Test Recorder 之前,请确保关闭测试设备上的动画以防止出现意外结果。请按照 Espresso 设置说明 进行操作,但请注意,您无需手动设置对 Espresso 库的依赖项引用,因为 Test Recorder 会在您 保存录制内容 时自动执行此操作。这些步骤只需对给定项目执行一次。

录制 Espresso 测试

Espresso 测试包含两个主要组件:UI 交互和对 View 元素的断言。UI 交互包括用户可能用来与您的应用交互的点击和输入操作。断言验证屏幕上视觉元素的存在或内容。例如,针对 Notes 测试应用 的 Espresso 测试可能包括点击按钮和编写新笔记的 UI 交互,但会使用断言来验证按钮的存在和笔记的内容。

本节将介绍如何使用 Espresso Test Recorder 创建这两个测试组件,以及如何保存完成的录制以生成测试。

录制 UI 交互

要开始使用 Espresso Test Recorder 录制测试,请按以下步骤操作

  1. 点击运行 > 录制 Espresso 测试
  2. 选择部署目标窗口中,选择要在其上录制测试的设备。如有必要,创建新的 Android 虚拟设备。点击确定
  3. Espresso Test Recorder 会触发项目的构建,并且应用必须安装并启动,Espresso Test Recorder 才能允许您与其交互。应用启动后,将出现录制您的测试窗口,并且由于您尚未与设备交互,因此主面板显示“尚未录制任何事件”。与您的设备交互以开始记录事件,例如“点击”和“输入”操作。

注意:在您开始记录交互之前,您可能会在设备上看到一个对话框,提示“正在等待调试器”或“正在附加调试器”。Espresso Test Recorder 使用调试器记录 UI 事件。调试器附加后,对话框将自动关闭;请勿点击强制关闭

录制的交互将显示在录制您的测试窗口的主面板中,如下面的图 1 所示。运行测试时,Espresso 测试将尝试按相同的顺序执行这些操作。

图 1.包含已记录 UI 交互的录制您的测试窗口。

添加断言以验证 UI 元素

断言通过三种主要类型验证 View 元素的存在或内容

  • 文本为:检查所选 View 元素的文本内容
  • 存在:检查 View 元素是否存在于屏幕上可见的当前 View 层次结构中
  • 不存在:检查 View 元素不存在于当前 View 层次结构中

要向测试添加断言,请按以下步骤操作

  1. 点击添加断言。Espresso 获取 UI 层次结构和有关当前应用状态的其他信息时,将出现屏幕截图对话框。Espresso 捕获屏幕截图后,对话框将自动关闭。
  2. 当前屏幕的布局将显示在录制您的测试窗口右侧的面板中。要选择要对其创建断言的 View 元素,请点击屏幕截图中的元素或使用窗口底部编辑断言框中的第一个下拉菜单。所选 View 对象将在红色框中突出显示。
  3. 编辑断言框中的第二个下拉菜单中选择要使用的断言。Espresso 会根据所选 View 元素填充有效的断言菜单。
    • 如果您选择“文本为”断言,Espresso 会自动插入当前位于所选 View 元素内部的文本。您可以使用编辑断言框中的文本字段编辑文本以匹配所需的断言。
  4. 点击保存并添加另一个以创建另一个断言,或点击保存断言以关闭断言面板。

图 2 中的屏幕截图显示正在创建“文本为”断言以验证笔记的标题是否为“快乐测试!”。

图 2.选择 View 元素(以红色显示)后的编辑断言框。

在创建断言时,您可以继续与您的应用交互,即使断言面板仍在录制您的测试窗口中打开。Espresso Test Recorder 将继续记录您的操作,但您正在编辑的断言将在保存后出现在这些交互之前。断言的屏幕截图还保留了您点击添加断言按钮时设备或模拟器的布局。

保存录制

完成与应用的交互和添加断言后,请使用以下步骤保存录制并生成 Espresso 测试

  1. 点击完成录制。将出现为您的测试选择测试类名称窗口。
  2. Espresso Test Recorder 会根据启动活动的名称在其包中为您的测试提供一个唯一名称。如果您想更改建议的名称,请使用测试类名称文本字段。点击保存
    • 如果您尚未将 Espresso 依赖项添加到您的应用中,则尝试保存测试时将出现缺少 Espresso 依赖项对话框。点击以自动将依赖项添加到您的 build.gradle 文件中。
  3. Espresso Test Recorder 生成文件后,文件会自动打开,并且 Android Studio 会在 IDE 的项目窗口中显示所选的测试类。
    • 测试保存的位置取决于您的 检测测试 根目录以及启动活动的包名称。例如,针对 Notes 测试应用 的测试保存在您录制测试的应用模块的src > androidTest > java > com.example.username.appname 文件夹中。

在本地运行 Espresso 测试

要运行 Espresso 测试,请使用 Android Studio IDE 左侧的项目 窗口

  1. 打开所需的应用模块文件夹并导航到要运行的测试。测试的位置取决于您的 检测测试 根目录以及启动活动的包名称。以下示例演示了针对 Notes 测试应用 的测试将保存到的位置
    • 如果您在窗口中使用Android 视图,请导航到java > com.example.username.appname (androidTest)
    • 如果您在窗口中使用项目视图,请导航到模块文件夹内的src > androidTest > java > com.example.username.appname
  2. 右键点击测试并点击运行“testName”
    • 或者,您可以打开测试文件并右键点击生成的测试类或方法。在测试您的应用页面上了解有关如何运行测试的更多信息。
  3. 选择部署目标窗口中,选择要在其上运行测试的设备。如有必要,创建新的 Android 虚拟设备。点击确定

在 IDE 底部的运行窗口中监控测试的进度。Android Studio 会运行项目的完整构建,并在运行窗口中打开一个名为测试的选项卡,如图 3 所示。您可以在此选项卡中检查测试是通过还是失败,以及测试运行了多长时间。测试完成后,选项卡将记录“测试已完成运行”。

图 3.在本地运行 Espresso 测试后,运行窗口中的示例输出。

要了解有关编写测试运行配置的更多信息,请阅读创建和编辑运行/调试配置中的“为类或方法定义测试配置”部分。

使用 Firebase Test Lab for Android 运行 Espresso 测试

您可以将 Espresso Test Recorder 生成的测试与Firebase Test Lab结合使用,以在云端数百种设备配置上测试您的应用。在Spark 计划的每日免费配额内使用 Test Lab 测试您的应用无需付费。要使用 Firebase Test Lab 运行 Espresso 测试,请为您的应用创建一个 Firebase 项目,然后按照说明从 Android Studio使用 Firebase Test Lab 运行您的测试

图 4.在多个设备上使用 Firebase Test Lab 运行测试后,运行窗口中的示例输出。