Android Studio 旨在简化测试。它包含许多功能,可以简化创建、运行和分析测试的方式。您可以设置在本地计算机上运行的测试,或设置在设备上运行的检测测试。您可以轻松地在一台或多台设备上运行单个测试或特定组的测试。测试结果会直接显示在 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 所示。
创建新的测试
您可以按照以下步骤为特定的类或方法添加新的测试:
- 打开包含要测试的代码的源文件。
- 将光标放在要测试的类或方法的名称上,然后按 Control+Shift+T(在 macOS 上按 Command+Shift+T)。
- 在出现的弹出窗口中,点击创建新的测试…。
- 在**创建测试**对话框中,选择JUnit4,编辑要生成的字段和方法,然后点击确定。
- 在**选择目标目录**对话框中,点击对应于要创建的测试类型的源集:对于 Instrumentation 测试,选择androidTest;对于本地单元测试,选择test。然后点击确定。
或者,您可以按照以下步骤在相应的测试源集中创建通用测试文件:
- 在左侧的**项目**窗口中,点击下拉菜单并选择Android视图。
- 右键点击java目录,然后选择新建 > Java 类或新建 > Kotlin 类/文件。或者,您可以选择java目录并使用 Control+N(在 macOS 上按 Command+N)快捷键。
- 在**选择目标目录**对话框中,点击对应于要创建的测试类型的源集:对于 Instrumentation 测试,选择androidTest;对于本地单元测试,选择test。然后点击确定。
- 命名文件,然后点击确定。
如果添加测试后应用无法编译,请确保设置了正确的测试库依赖项。有关正确的依赖项,请参阅 构建本地测试 和 构建 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 运行,结果都可能保持一致。
早期版本的 Android Studio 使用 IntelliJ Android Instrumentation 测试运行器,而不是 Gradle 的 Android Instrumentation 测试运行器。因此,如果您没有使用最新版本的 Android Studio,则根据您是从 Android Studio 运行测试还是从命令行使用 Gradle 插件运行测试,您可能会看到不同的测试结果,例如,使用一个运行器通过的测试在另一个运行器上失败。
如果您已将 Instrumentation 测试配置保存到项目中,则它们将使用 Gradle 在连接的设备上运行测试。您可以使用测试类或方法旁边的装订线操作创建新的 Instrumentation 测试配置,如下所示。
运行 Instrumentation 测试时,您可以通过检查测试矩阵中 Gradle 任务输出的测试输出,确认 Android Studio 是否正在使用 Gradle 测试运行器。
并行在多个设备上运行
Instrumentation 测试默认在单个物理设备或模拟器上运行。如果要查看测试在更大范围的设备上的行为,可以按照以下步骤选择更多设备:
在运行测试之前,打开目标设备下拉菜单,然后选择选择多个设备…。
选择所需的设备,然后点击确定。
确保目标下拉菜单上的文本已更改为多个设备,然后点击运行 。
测试矩阵工具窗口显示每个选定设备配置的测试结果。
您可以点击特定测试以在输出窗格中检查结果。您还可以通过点击各个列对测试进行排序。
使用 Firebase Test Lab 运行
使用 Firebase Test Lab,您可以在许多流行的 Android 设备和设备配置(区域设置、方向、屏幕尺寸和平台版本的不同组合)上同时测试您的应用。这些测试在远程 Google 数据中心的物理和虚拟设备上运行。测试结果提供测试日志,并包含任何应用故障的详细信息。
要开始使用 Firebase Test Lab,您需要执行以下操作:
- 创建一个 Google 帐户(如果您还没有)。
- 在 Firebase 控制台 中,点击创建新项目。
Android Studio 提供了集成工具,允许您配置如何将测试部署到 Firebase Test Lab。创建 Firebase 项目后,您可以创建测试配置并运行测试:
- 点击主菜单中的运行 > 编辑配置。
- 点击添加新配置 并选择Android Instrumentation 测试。
- 输入或选择测试的详细信息,例如测试名称、模块类型、测试类型和测试类。
- 在部署目标选项下的目标下拉菜单中,选择Firebase Test Lab 设备矩阵。
- 如果您未登录,请点击使用 Google 登录,并允许 Android Studio 访问您的帐户。
- 在云项目旁边,从列表中选择您的 Firebase 项目。
- 在矩阵配置旁边,从下拉菜单中选择一个默认配置,或者通过按打开对话框 创建自己的配置。您可以选择一个或多个设备、Android 版本、区域设置和屏幕方向,以测试您的应用。Firebase Test Lab 将在生成测试结果时针对您选择的所有组合测试您的应用。
- 点击运行/调试配置对话框中的确定以退出。
- 点击运行 运行您的测试。
分析测试结果
当 Firebase Test Lab 完成运行测试后,将打开运行窗口以显示结果,如图 9 所示。您可能需要点击显示通过 才能查看所有执行的测试。
您还可以通过点击运行窗口中测试执行日志开头显示的链接,在 Web 上分析测试。
查看测试覆盖率
测试覆盖率工具可用于本地单元测试,以跟踪单元测试覆盖的应用代码的百分比和区域。使用测试覆盖率工具确定您是否已充分测试构成应用的元素、类、方法和代码行。
要运行包含代码覆盖率的测试,请按照运行测试中描述的相同步骤操作,只是不要点击**运行** ,而是点击**以覆盖率运行测试名称** 。在**项目**窗口中,此选项可能隐藏在**更多运行/调试**后面。您还可以在**运行/调试配置**对话框的**代码覆盖率**选项卡下配置覆盖率设置。
查看测试结果
从 Android Studio 运行一个或多个测试时,结果将显示在**运行**窗口中。图 11 显示了一个成功的测试运行。
**运行**窗口在左侧以树状视图显示测试,在右侧的输出窗格中显示当前测试套件的结果和消息。使用工具栏、上下文菜单和状态图标管理测试结果,如下所示
- 使用**运行工具栏**重新运行当前测试、停止当前测试、重新运行失败的测试(未显示,因为它仅适用于单元测试)、暂停输出和转储线程。
- 使用**测试工具栏**筛选和排序测试结果。您还可以展开或折叠节点、显示测试覆盖率以及导入或导出测试结果。
- 点击**上下文菜单**跟踪正在运行的测试、显示内联统计信息、滚动到堆栈跟踪、在异常处打开源代码、自动滚动到源代码以及在测试运行完成后选择第一个失败的测试。
- **测试状态图标**指示测试是否存在错误、是否被忽略、是否失败、是否正在进行、是否已通过、是否已暂停、是否已终止或是否未运行。
- 右键点击树状视图中的一行以显示上下文菜单,该菜单允许您在调试模式下运行测试、打开测试源代码文件或跳转到正在测试的源代码中的行。
分析测试失败
当一个或多个测试失败时,结果窗口将显示警告标志和失败次数(例如,“测试失败:1”)。
在左侧的树状视图中点击失败的测试时,右侧的输出窗格将显示该测试的详细信息。它会在实际值旁边显示预期值,以便您可以进行比较。**点击查看差异**链接将打开一个差异查看器,您可以在其中并排查看结果。
了解更多
此页面介绍了使用 Android Studio 创建和运行第一个测试时需要遵循的基本步骤。您也可以选择从命令行运行测试。您还可以查看IntelliJ 测试文档。有关在创建更大的测试套件时如何配置测试的更多信息,请参阅高级测试设置。