使用 Espresso 测试录制器创建 UI 测试

Espresso 测试录制器工具可以让您在不编写任何测试代码的情况下为您的应用程序创建 UI 测试。通过录制测试场景,您可以录制您与设备的交互,并添加断言以验证应用程序特定快照中的 UI 元素。Espresso 测试录制器会获取保存的录制并自动生成相应的 UI 测试,您可以运行该测试来测试您的应用程序。

Espresso 测试记录器根据 Espresso 测试框架(AndroidX Test 中的 API)编写测试。Espresso API 鼓励您根据用户操作创建简洁可靠的 UI 测试。通过声明预期、交互和断言,而无需直接访问底层应用程序的活动和视图,这种结构可以防止测试不稳定并优化测试运行速度。

在测试设备上关闭动画

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

记录 Espresso 测试

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

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

记录 UI 交互

要开始使用 Espresso 测试记录器记录测试,请按以下步骤操作

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

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

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

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

添加断言以验证 UI 元素

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

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

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

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

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

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

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

保存记录

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

  1. 单击 完成记录。会显示 为您的测试选择一个测试类名称 窗口。
  2. Espresso 测试记录器会根据启动的活动的名称在其包中为您的测试提供一个唯一的名称。如果您想更改建议的名称,请使用 测试类名称 文本字段。单击 保存
    • 如果您尚未将 Espresso 依赖项添加到您的应用程序,则在您尝试保存测试时,会显示 缺少 Espresso 依赖项 对话框。单击 以将依赖项自动添加到您的 build.gradle 文件中。
  3. Espresso 测试记录器生成文件后,该文件会自动打开,并且 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 测试记录器生成的测试与 Firebase Test Lab 结合使用,以在云端数以百计的设备配置上测试您的应用程序。在 Spark 计划的免费每日配额 内,使用 Test Lab 测试您的应用程序是免费的。要使用 Firebase Test Lab 运行 Espresso 测试,请为您的应用程序 创建 Firebase 项目,然后按照说明从 Android Studio 使用 Firebase Test Lab 运行测试

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