在 Android Studio 中测试

Android Studio 旨在简化测试。它包含许多功能,可以简化创建、运行和分析测试的方式。您可以设置在本地计算机上运行的测试,或设置在设备上运行的检测测试。您可以轻松地在一台或多台设备上运行单个测试或特定组的测试。测试结果会直接显示在 Android Studio 中。

图 1. Android Studio 显示测试结果概述。

此页面介绍如何在 Android Studio 中管理测试。要了解如何编写自动化的 Android 测试,请参阅 在 Android 上测试应用

测试类型和位置

测试的位置取决于您编写的测试类型。Android 项目为本地单元测试和 Instrumentation 测试提供了默认的源代码目录。

本地单元测试位于 module-name/src/test/java/。这些测试在您机器的本地 Java 虚拟机 (JVM) 上运行。当您的测试没有 Android 框架依赖项,或者您可以为 Android 框架依赖项创建测试替身时,使用这些测试来最大程度地减少执行时间。有关如何编写本地单元测试的更多信息,请参阅 构建本地单元测试

Instrumentation 测试位于 $module-name/src/androidTest/java/。这些测试在硬件设备或模拟器上运行。它们可以访问 Instrumentation API,这些 API 可让您访问信息(例如,您正在测试的应用的 Context 类),并允许您从测试代码中控制被测应用。Instrumentation 测试构建到一个单独的 APK 中,因此它们有自己的 AndroidManifest.xml 文件。此文件是自动生成的,但您可以在 $module-name/src/androidTest/AndroidManifest.xml 中创建自己的版本,该版本将与生成的清单合并。在编写集成和功能 UI 测试以自动执行用户交互时,或者当您的测试具有无法创建测试替身的 Android 依赖项时,使用 Instrumentation 测试。有关如何编写 Instrumentation 测试的更多信息,请参阅 构建 Instrumentation 测试自动执行 UI 测试

您可以将测试放在特定于构建变体的目录中,以仅测试特定的构建变体。例如,您可以将一些本地单元测试放在 $module-name/src/testMyFlavor/java/ 中,以便测试针对使用此变体的源代码构建的应用。有关如何创建这些定制测试的更多信息,请参阅 为构建变体创建 Instrumentation 测试

创建新项目或添加应用模块时,Android Studio 会创建前面列出的测试源集,并在每个源集中包含一个示例测试文件。您可以在**项目**窗口中看到它们,如 图 2 所示。

图 2. 项目的 (1) Instrumentation 测试和 (2) 本地 JVM 测试在 项目视图(左侧)或 Android 视图(右侧)中可见。

创建新的测试

您可以按照以下步骤为特定的类或方法添加新的测试:

  1. 打开包含要测试的代码的源文件。
  2. 将光标放在要测试的类或方法的名称上,然后按 Control+Shift+T(在 macOS 上按 Command+Shift+T)。
  3. 在出现的弹出窗口中,点击创建新的测试…
  4. 在**创建测试**对话框中,选择JUnit4,编辑要生成的字段和方法,然后点击确定
  5. 在**选择目标目录**对话框中,点击对应于要创建的测试类型的源集:对于 Instrumentation 测试,选择androidTest;对于本地单元测试,选择test。然后点击确定

或者,您可以按照以下步骤在相应的测试源集中创建通用测试文件:

  1. 在左侧的**项目**窗口中,点击下拉菜单并选择Android视图。
  2. 右键点击java目录,然后选择新建 > Java 类新建 > Kotlin 类/文件。或者,您可以选择java目录并使用 Control+N(在 macOS 上按 Command+N)快捷键。
  3. 在**选择目标目录**对话框中,点击对应于要创建的测试类型的源集:对于 Instrumentation 测试,选择androidTest;对于本地单元测试,选择test。然后点击确定
  4. 命名文件,然后点击确定

如果添加测试后应用无法编译,请确保设置了正确的测试库依赖项。有关正确的依赖项,请参阅 构建本地测试构建 Instrumentation 测试

运行测试

在运行任何测试之前,请确保您的项目已与 Gradle 完全同步,方法是点击工具栏中的同步项目 。您可以使用不同级别的粒度运行测试。

  • 运行目录或文件中所有测试,请打开项目窗口并执行以下任一操作:

    • 右键点击目录或文件,然后点击运行
    • 选择目录或文件,然后使用快捷键 Control+Shift+R
  • 运行类或特定方法中的所有测试,请在代码编辑器中打开测试文件,并执行以下任一操作:

    • 按代码编辑器 装订线 中的运行测试图标
    • 右键点击测试类或方法,然后点击运行
    • 选择测试类或方法,然后使用快捷键 Control+Shift+R

您的 Instrumentation 测试将在物理设备或模拟器上运行。要了解有关设置物理设备的更多信息,请参阅 在硬件设备上运行应用。要了解有关设置模拟器的更多信息,请参阅 在 Android 模拟器上运行应用

配置测试运行

默认情况下,您的测试使用 Android Studio 的默认运行配置运行。如果需要更改一些运行设置(例如 Instrumentation 运行器和部署选项),可以在运行/调试配置对话框中编辑运行配置(点击运行 > 编辑配置)。

统一的 Gradle 测试运行器

Android Gradle 插件 7.1.0 和 Android Studio Bumblebee 及更高版本使用 Gradle 自身的 Android Instrumentation 测试运行器实现来运行 Instrumentation 测试。通过使用相同的测试运行器,无论您是使用 AGP 从命令行运行(例如在持续集成服务器上),还是从 Android Studio 运行,结果都可能保持一致。

图 3. 统一的 Gradle 测试运行器。

早期版本的 Android Studio 使用 IntelliJ Android Instrumentation 测试运行器,而不是 Gradle 的 Android Instrumentation 测试运行器。因此,如果您没有使用最新版本的 Android Studio,则根据您是从 Android Studio 运行测试还是从命令行使用 Gradle 插件运行测试,您可能会看到不同的测试结果,例如,使用一个运行器通过的测试在另一个运行器上失败。

图 4. 在旧版 Android Studio 中的离散测试运行器。

如果您已将 Instrumentation 测试配置保存到项目中,则它们将使用 Gradle 在连接的设备上运行测试。您可以使用测试类或方法旁边的装订线操作创建新的 Instrumentation 测试配置,如下所示。

图 5. 从装订线操作运行测试。

运行 Instrumentation 测试时,您可以通过检查测试矩阵中 Gradle 任务输出的测试输出,确认 Android Studio 是否正在使用 Gradle 测试运行器。

并行在多个设备上运行

Instrumentation 测试默认在单个物理设备或模拟器上运行。如果要查看测试在更大范围的设备上的行为,可以按照以下步骤选择更多设备:

  1. 在运行测试之前,打开目标设备下拉菜单,然后选择选择多个设备…

    图 6. 选择多个设备下拉菜单。

  2. 选择所需的设备,然后点击确定

  3. 确保目标下拉菜单上的文本已更改为多个设备,然后点击运行

  4. 测试矩阵工具窗口显示每个选定设备配置的测试结果。

    图 7. 测试矩阵工具窗口中的测试结果。

  5. 您可以点击特定测试以在输出窗格中检查结果。您还可以通过点击各个列对测试进行排序。

使用 Firebase Test Lab 运行

使用 Firebase Test Lab,您可以在许多流行的 Android 设备和设备配置(区域设置、方向、屏幕尺寸和平台版本的不同组合)上同时测试您的应用。这些测试在远程 Google 数据中心的物理和虚拟设备上运行。测试结果提供测试日志,并包含任何应用故障的详细信息。

要开始使用 Firebase Test Lab,您需要执行以下操作:

  1. 创建一个 Google 帐户(如果您还没有)。
  2. Firebase 控制台 中,点击创建新项目

Android Studio 提供了集成工具,允许您配置如何将测试部署到 Firebase Test Lab。创建 Firebase 项目后,您可以创建测试配置并运行测试:

  1. 点击主菜单中的运行 > 编辑配置
  2. 点击添加新配置 并选择Android Instrumentation 测试
  3. 输入或选择测试的详细信息,例如测试名称、模块类型、测试类型和测试类。
  4. 部署目标选项下的目标下拉菜单中,选择Firebase Test Lab 设备矩阵
  5. 如果您未登录,请点击使用 Google 登录,并允许 Android Studio 访问您的帐户。
  6. 云项目旁边,从列表中选择您的 Firebase 项目。
  7. 矩阵配置旁边,从下拉菜单中选择一个默认配置,或者通过按打开对话框 创建自己的配置。您可以选择一个或多个设备、Android 版本、区域设置和屏幕方向,以测试您的应用。Firebase Test Lab 将在生成测试结果时针对您选择的所有组合测试您的应用。
  8. 点击运行/调试配置对话框中的确定以退出。
  9. 点击运行 运行您的测试。

图 8. 为 Firebase Test Lab 创建测试配置。

分析测试结果

当 Firebase Test Lab 完成运行测试后,将打开运行窗口以显示结果,如图 9 所示。您可能需要点击显示通过 才能查看所有执行的测试。

图 9. 使用 Firebase Test Lab 的 Instrumentation 测试结果。

您还可以通过点击运行窗口中测试执行日志开头显示的链接,在 Web 上分析测试。

查看测试覆盖率

测试覆盖率工具可用于本地单元测试,以跟踪单元测试覆盖的应用代码的百分比和区域。使用测试覆盖率工具确定您是否已充分测试构成应用的元素、类、方法和代码行。

要运行包含代码覆盖率的测试,请按照运行测试中描述的相同步骤操作,只是不要点击**运行** ,而是点击**以覆盖率运行测试名称** 。在**项目**窗口中,此选项可能隐藏在**更多运行/调试**后面。您还可以在**运行/调试配置**对话框的**代码覆盖率**选项卡下配置覆盖率设置。

图 10. 应用程序的代码覆盖率百分比。

查看测试结果

从 Android Studio 运行一个或多个测试时,结果将显示在**运行**窗口中。图 11 显示了一个成功的测试运行。

图 11. 测试结果显示在运行窗口中。

**运行**窗口在左侧以树状视图显示测试,在右侧的输出窗格中显示当前测试套件的结果和消息。使用工具栏、上下文菜单和状态图标管理测试结果,如下所示

  1. 使用**运行工具栏**重新运行当前测试、停止当前测试、重新运行失败的测试(未显示,因为它仅适用于单元测试)、暂停输出和转储线程。
  2. 使用**测试工具栏**筛选和排序测试结果。您还可以展开或折叠节点、显示测试覆盖率以及导入或导出测试结果。
  3. 点击**上下文菜单**跟踪正在运行的测试、显示内联统计信息、滚动到堆栈跟踪、在异常处打开源代码、自动滚动到源代码以及在测试运行完成后选择第一个失败的测试。
  4. **测试状态图标**指示测试是否存在错误、是否被忽略、是否失败、是否正在进行、是否已通过、是否已暂停、是否已终止或是否未运行。
  5. 右键点击树状视图中的一行以显示上下文菜单,该菜单允许您在调试模式下运行测试、打开测试源代码文件或跳转到正在测试的源代码中的行。

分析测试失败

当一个或多个测试失败时,结果窗口将显示警告标志和失败次数(例如,“测试失败:1”)。

图 12. 输出窗格中失败的测试详细信息。

在左侧的树状视图中点击失败的测试时,右侧的输出窗格将显示该测试的详细信息。它会在实际值旁边显示预期值,以便您可以进行比较。**点击查看差异**链接将打开一个差异查看器,您可以在其中并排查看结果。

了解更多

此页面介绍了使用 Android Studio 创建和运行第一个测试时需要遵循的基本步骤。您也可以选择从命令行运行测试。您还可以查看IntelliJ 测试文档。有关在创建更大的测试套件时如何配置测试的更多信息,请参阅高级测试设置