Android Studio 的主要目标是简化测试过程。它包含许多功能,可以帮助您以更简单的方式创建、运行和分析测试。您可以在本地计算机上运行测试,或者在设备上运行插桩测试。此外,您还可以轻松地在一台或多台设备上同时运行单个测试或一组特定测试,并直接在 Android Studio 中查看测试结果。
图1展示了 Android Studio 中测试结果的概览。
本节将介绍如何在 Android Studio 中管理测试。如果您想了解如何编写自动化 Android 测试,请参阅“在 Android 平台上测试应用”。
测试类型和位置:
测试的位置取决于您要编写的测试类型。对于本地单元测试和插桩测试,Android 项目具有默认的源代码目录结构。以下是一些常见的位置:
- module-name/src/test/java/
- $module-name/src/androidTest/java/InstrumentationContextAndroidManifest.xml
- $module-name/src/androidTest/AndroidManifest.xml
- $module-name/src/testMyFlavor/java/
当您创建新项目或添加应用模块时,Android Studio 会为上述测试源代码集创建示例测试文件。您可以在“Project”窗口中看到它们,如图2所示。
图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 Class 或 New > Kotlin Class/File。或者,您可以选择 java 目录并使用 Ctrl+N(在 macOS 上,则使用 Command+N)快捷键。
3. 在 Choose Destination Directory 对话框中,点击与要创建的测试所属的类型对应的源代码集:如果是插桩测试,请点击 androidTest;如果是本地单元测试,请点击 test。然后,点击 OK。
4. 为文件命名,然后点击 OK。
5. 如果您的应用在添加测试后无法编译,请确保您已设置正确的测试库依赖项。如需了解正确的依赖项,请参阅构建本地测试和构建插桩测试。
6. 在运行任何测试之前,点击工具栏中的 Sync Project 图标 ,确保您的项目与 Gradle 完全同步。您可以运行不同粒度级别的测试:
- 如需在目录或文件中运行所有测试,请打开“Project”窗口,然后执行以下任一操作:右键点击目录或文件,然后点击 Run 图标;选择目录或文件,然后使用快捷键 Ctrl+Shift+R。
- 如需在某个类或特定方法中运行所有测试,请在代码编辑器中打开测试文件,然后执行以下任一操作:按下边线中的 Run test 图标;右键点击测试类或方法,然后点击 Run 图标;选择测试类或方法,然后使用快捷键 Ctrl+Shift+R。
7. 插桩测试将在实体设备或模拟器上运行。如需详细了解如何设置实体设备,请参阅在硬件设备上运行应用。如需详细了解如何设置模拟器,请参阅在 Android 模拟器上运行应用。
8. 默认情况下,您的测试会使用 Android Studio 的默认运行配置来运行。如果您需要更改某些运行设置(如插桩测试运行程序和部署选项),可以在 Run/Debug Configurations 对话框中修改运行配置(依次点击 Run > Edit Configurations)。
Android Gradle 插件 7.1.0 及更高版本支持使用 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 测试运行程序。
多部设备上的并行运行
默认情况下,插桩测试会在一台实体设备或模拟器上运行。如果您想查看测试在更多设备上的行为,可以按照以下步骤选择更多设备:
1. 在运行测试之前,请打开目标设备下拉菜单,然后选择 Select Multiple Devices...。
2. 选择目标设备,然后点击 OK。
3. 确保目标下拉菜单中的文本已变为 Multiple Devices,然后点击 Run 图标。
4. 测试矩阵工具窗口会显示所选的每种设备配置的测试结果。
5. 您可以点击特定测试以在输出窗格中查看结果。 您也可以点击各个列,对测试进行排序。
通过 Firebase Test Lab 运行
使用 Firebase Test Lab,您可以在许多主要的 Android 设备和设备配置(如语言区域、屏幕方向、屏幕尺寸和平台版本的不同组合)上同时测试您的应用。这些测试将在远程 Google 数据中心的物理设备和虚拟设备上运行。测试结果将提供详细的测试日志以及所有应用故障信息。
要开始使用 Firebase Test Lab,您需要执行以下操作:
Android Studio 提供了集成工具,可让您配置如何将测试部署到 Firebase Test Lab。创建 Firebase 项目后,您可以创建测试配置并运行测试:
1. 从主菜单中依次点击“Run”(运行)> “Edit Configurations”(编辑配置)。
2. 点击“Add New Configuration”(添加新配置)图标,然后选择“Android Instrumented Tests”(Android 仪器化测试)。
3. 输入或选择测试的详细信息,如测试名称、模块类型、测试类型和测试类。
4. 从“Deployment Target Options”(部署目标选项)下的“Target”(目标)下拉菜单中,选择“Firebase Test Lab Device Matrix”(Firebase Test Lab 设备矩阵)。
5. 如果尚未登录,请点击“Sign in with Google”(使用 Google 登录),并允许 Android Studio 访问您的账号。
6. 在 Cloud Project(云项目)旁边的列表中选择您的 Firebase 项目。
7. 在“Matrix configuration”(矩阵配置)旁边,从下拉列表中选择一个默认配置,或单击“Open Dialog”(打开对话框)图标以创建自己的配置。您可以选择要用于测试应用的一个或多个设备、Android 版本、语言区域和屏幕方向。在生成测试结果时,Firebase Test Lab 将根据您所选内容的每种组合来测试您的应用。
8. 在 “Run/Debug Configurations”(运行/调试配置)对话框中单击“OK”(确定)以退出。
9. 点击“Run”(运行)图标以运行您的测试。
图8:为 Firebase Test Lab 创建测试配置。
分析测试结果:当 Firebase Test Lab 运行完您的测试后,将打开“Run”窗口以显示结果,如图9所示。您可能需要单击“Show Passed”(显示通过)图标以查看已执行的所有测试。
图9:使用 Firebase Test Lab查看插桩测试的结果。
要分析测试作业日志开头的链接,请在网页上使用您的浏览器打开相应的链接。
若要查看测试覆盖率,请按照以下步骤操作:
1. 打开您的 Android Studio,点击“File”菜单,选择“Settings”。
2. 在“Settings”窗口中,选择“Tools” > “Android SDK Manager”。
3. 在“Android SDK Manager”窗口中,找到“SDK Tools”选项卡,勾选“Unit Testing Support”(对于Java项目)或“Android Unit Testing”(对于Android项目),然后点击“Apply”按钮。等待安装完成。
4. 点击“Run”菜单,选择“Edit Configurations”。
5. 在“Edit Configurations”窗口中,找到您要测试的项目,然后在右侧的配置选项卡中点击“Code Coverage”。
6. 在“Code Coverage”设置中,选择您想要使用的覆盖率工具(例如JaCoCo或EclEmma)。然后点击“OK”按钮保存设置。
完成以上步骤后,您可以在运行测试时选择相应的覆盖率工具来跟踪单元测试所覆盖的应用代码的百分比和区域。例如,对于Java项目,您可以在运行测试时输入`-javaagent:/path/to/your/jacocoagent.jar=includes=*,output=tcpserver,address=*,port=8000`,其中`/path/to/your/jacocoagent.jar`是JaCoCo代理程序的路径。对于Android项目,则需要在项目的`build.gradle`文件中添加以下代码:
```groovy
android {
...
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
javaOptions "-javaagent:$rootDir/build/interceptors/jacocoagent.jar=includes=*,output=tcpserver,address=*,port=8000"
}
```
您可以通过单击链接来打开差异查看器,其中包含有关如何排查和查看结果的详细信息。本文介绍了在使用Android Studio创建并运行首个测试时需要执行的基本步骤。此外,您还可以从命令行运行测试,也可以查阅IntelliJ文档中关于测试的内容。如果想要详细了解如何在创建大型测试套件时配置测试,请参考高级测试设置。