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