在 Android Studio 中测试

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

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

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

测试类型和位置

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

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

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

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

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

图 2. 您的项目的 (1) 插桩测试和 (2) 本地 JVM 测试可在项目视图(左侧)或 Android 视图(右侧)中查看。

创建新测试

您可以按照以下步骤直接从其源代码为特定类或方法添加新测试

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

或者,您可以在相应的测试源集中创建通用测试文件,如下所示

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

如果在添加测试后您的应用无法编译,请确保已设置正确的测试库依赖项。有关正确依赖项的信息,请参阅构建本地测试构建插桩测试

运行测试

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

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

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

    • 点击边槽中的运行测试图标
    • 右键点击测试类或方法,然后点击运行
    • 选择测试类或方法,然后使用快捷键 Control+Shift+R

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

配置测试运行

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

统一 Gradle 测试运行器

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

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

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

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

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

图 5. 从边槽操作运行测试。

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

在多个设备上并行运行

默认情况下,插桩测试在单个物理设备或模拟器上运行。如果您想查看测试在更多设备上的行为,可以按照以下步骤选择更多设备

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

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

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

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

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

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

  5. 您可以点击特定测试以在输出窗格中检查结果。您还可以通过点击不同的列来排序测试。

使用 Firebase Test Lab 运行

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

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

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

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

  1. 从主菜单中点击运行 > 编辑配置
  2. 点击添加新配置 并选择Android 插桩测试
  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 进行的插桩测试结果。

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

查看测试覆盖率

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

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

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

查看测试结果

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

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

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

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

分析测试失败

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

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

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

了解详情

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