在 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,可让您访问 Context 类等信息,并且允许您通过测试代码来控制受测应用。插桩测试内置于单独的 APK 中,因此它们都有自己的 AndroidManifest.xml 文件。此文件是自动生成的,但您可以在 $module-name/src/androidTest/AndroidManifest.xml 创建自己的版本,该版本将与生成的清单合并。在编写集成和功能界面测试来自动执行用户交互时,或者当您的测试具有您无法为其创建测试替身的 Android 依赖项时,可以使用插桩测试。如需详细了解如何编写插桩测试,请参阅构建插桩测试自动化界面测试

您可以将测试放在 build 变体专用目录中,以便仅测试特定 build 变体。例如,您可以在 $module-name/src/testMyFlavor/java/ 中放置一些本地单元测试,以便这些测试以通过此变种的源代码构建的应用为目标。如需详细了解如何创建这些量身定制的测试,请参阅为 build 变体创建插桩测试

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

图 2.您的项目的 (1) 插桩测试和 (2) 本地 JVM 测试会显示在 Project 视图(左侧)或 Android 视图(右侧)中。

创建新测试

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

  1. 打开包含要测试的代码的源文件。
  2. 将光标放在要测试的类或方法的名称上,然后按 Ctrl+Shift+T 组合键(在 macOS 上,则按 Command+Shift+T 组合键)。
  3. 在显示的弹出式菜单中,点击 Create New Test…
  4. Create Test 对话框中,选择 JUnit4,修改要生成的字段和方法,然后点击 OK
  5. Choose Destination Directory 对话框中,点击与要创建的测试所属的类型对应的源代码集:如果是插桩测试,请点击 androidTest;如果是本地单元测试,请点击 test。然后,点击 OK

或者,您也可以在相应的测试源代码集中创建一个通用测试文件,具体操作步骤如下:

  1. 在左侧的 Project 窗口中,点击下拉菜单并选择 Android 视图。
  2. 右键点击 java 目录,然后依次选择 New > Java ClassNew > Kotlin Class/File。或者,您可以选择 java 目录并使用 Ctrl+N(在 macOS 上,则使用 Command+N)快捷键。
  3. Choose Destination Directory 对话框中,点击与要创建的测试所属的类型对应的源代码集:如果是插桩测试,请点击 androidTest;如果是本地单元测试,请点击 test。然后,点击 OK
  4. 为文件命名,然后点击 OK

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

运行测试

在运行任何测试之前,点击工具栏中的 Sync Project 图标 ,确保您的项目与 Gradle 完全同步。您可以运行不同粒度级别的测试:

  • 如需在目录或文件中运行所有测试,请打开“Project”窗口,然后执行以下任一操作:

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

    • 边线中的 Run test 图标
    • 右键点击测试类或方法,然后点击 Run 图标
    • 选择测试类或方法,然后使用快捷键 Ctrl+Shift+R

插桩测试将在实体设备或模拟器上运行。如需详细了解如何设置实体设备,请参阅在硬件设备上运行应用。如需详细了解如何设置模拟器,请参阅在 Android 模拟器上运行应用

配置测试运行

默认情况下,您的测试会使用 Android Studio 的默认运行配置来运行。如果您需要更改某些运行设置(如插桩测试运行程序和部署选项),可以在 Run/Debug Configurations 对话框中修改运行配置(依次点击 Run > Edit Configurations)。

统一 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.通过边线操作运行测试

运行插桩测试时,您可以通过检查 Test Matrix for Gradle 任务输出中的测试输出,来确认 Android Studio 使用的是不是 Gradle 测试运行程序。

停用统一 Gradle 测试运行程序

默认情况下,Android Studio Bumblebee 会使用 Gradle 运行其插桩测试。如果您遇到问题,可以按以下方法停用此行为:

  1. 依次选择 File > Settings > Build, Execution, Deployment > Testing(在 MacOS 设备上,则依次选择 Android Studio > Preferences > Build, Execution, Deployment > Testing)。
  2. 取消选中 Run Android instrumented testing using Gradle 旁边的方框,然后点击 OK

在 Android Studio 之外运行测试时,您还可以通过执行以下任一操作来还原之前的行为:

  • 使用以下命令行参数:-Pandroid.experimental.androidTest.useUnifiedTestPlatform=false
  • 将以下参数添加到项目的 gradle.properties 文件中:android.experimental.androidTest.useUnifiedTestPlatform=false

为了帮助解决您可能遇到的问题,请报告 bug

在多部设备上并行运行

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

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

    图 6. 选择“Multiple Devices”下拉菜单。

  2. 选择目标设备,然后点击 OK

  3. 确保目标下拉菜单中的文本更改为 Multiple Devices,然后点击 Run 图标

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

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

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

通过 Firebase Test Lab 运行

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

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

  1. 创建一个 Google 帐号(如果您还没有帐号)。
  2. Firebase 控制台中,点击 Create New Project。利用 Test Lab 在 Spark 方案每日免费配额内测试您的应用时不收取任何费用。

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

  1. 从主菜单中依次点击 Run > Edit Configurations
  2. 点击 Add New Configuration 图标 ,然后选择 Android Instrumented Tests
  3. 输入或选择测试的详细信息,如测试名称、模块类型、测试类型和测试类。
  4. Deployment Target Options 下的 Target 下拉菜单中,选择 Firebase Test Lab Device Matrix
  5. 如果您未登录,请点击 Sign in with Google,并允许 Android Studio 访问您的帐号。
  6. Cloud Project 旁边,从列表中选择您的 Firebase 项目。
  7. Matrix configuration 旁边,请从下拉列表中选择一个默认配置,或按 Open Dialog 图标 创建自己的配置。您可以选择要用于测试应用的一个或多个设备、Android 版本、语言区域和屏幕方向。在生成测试结果时,Firebase 测试实验室会根据您所选内容的每种组合来测试您的应用。
  8. Run/Debug Configurations 对话框中点击 OK 以退出。
  9. 点击 Run 图标 以运行您的测试。

图 8. 为 Firebase 测试实验室创建测试配置。

分析测试结果

Firebase 测试实验室运行完您的测试后,将打开 Run 窗口以显示结果,如图 9 所示。您可能需要点击 Show Passed 图标 以查看执行的所有测试。

图 9. 使用 Firebase 测试实验室查看插桩测试的结果。

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

查看测试覆盖率

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

如需进行覆盖率测试,请按照运行测试中所述的步骤操作,只是不用点击 Run 图标 ,而是改为点击 Run test-name with coverage 图标 。在 Project 窗口中,此选项可能隐藏在 More Run/Debug 后面。您还可以在 Run/Debug Configurations 对话框的 Code Coverage 标签页下配置覆盖率设置。

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

查看测试结果

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

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

Run 窗口中,测试显示在左侧的树状视图中,而当前测试套件的结果和消息显示在右侧的输出窗格中。您可以使用工具栏、上下文菜单和状态图标来管理测试结果,具体说明如下:

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

分析测试失败情况

当您的一项或多项测试失败时,结果窗口会显示一个警告符号以及失败次数(例如“Tests failed: 1”):

图 12. 输出窗格中的测试失败详情。

点击左侧树状视图中的失败测试后,右侧的输出窗格会显示该测试的详细信息。实际值旁边会显示预期值,因此您可以对比这两个值。Click to see difference 链接可打开差异查看视图,您可以在其中并排查看结果。

了解详情

本页介绍了使用 Android Studio 创建和运行首个测试时要执行的基本步骤。您也可以选择从命令行运行测试。您还可以参阅有关测试的 IntelliJ 文档。如需详细了解如何在创建大型测试套件时配置测试,请参阅高级测试设置