android 测试工具,使用命令行运行测试  |  Android 开发者  |  Android Developers

本文详细指导如何通过命令行使用Gradle或adb shell来运行Android应用的单元测试与插桩测试,包括本地测试、插桩测试的步骤、测试结果位置,以及如何利用adb shell灵活控制aminstrument进行测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文档介绍了如何直接通过命令行创建和运行测试。本文假定您已经知道如何在编程环境中创建 Android 应用。

运行测试

您可以从命令行使用 Gradle 或 Android 调试桥 (adb) shell 运行测试。

借助 Android Plugin for Gradle,您可以通过命令行在 Gradle 项目中运行单元测试。如需详细了解如何为应用构建单元测试,请参阅构建有效的单元测试。

使用 Gradle 运行单元测试

借助 Android Plugin for Gradle,您可以通过命令行在 Gradle 项目中运行单元测试。如需详细了解如何为应用构建单元测试,请参阅构建有效的单元测试。

下表总结了如何使用 Gradle 运行单元测试:

单元测试类型

要运行的命令

测试结果所在的位置

本地单元测试

调用 test 任务:

./gradlew test

HTML 测试结果文件:path_to_your_project/module_name/build/reports/tests/ 目录。

XML 测试结果文件:path_to_your_project/module_name/build/test-results/ 目录。

插桩单元测试

调用 connectedAndroidTest 任务:

./gradlew connectedAndroidTest

HTML 测试结果文件:path_to_your_project/module_name/build/reports/androidTests/connected/ 目录。

XML 测试结果文件:path_to_your_project/module_name/build/outputs/androidTest-results/connected/ 目录。

Gradle 支持任务名称缩写。这意味着,如果您输入以下命令,便可启动 connectedAndroidTest 任务。

./gradlew cAT

test 和 connectedAndroidTest 任务会在每个模块上运行测试,并在项目中构建变体。您可以在 test 或 connectedAndroidTest 任务前加上模块名称和英文冒号 (:),仅针对项目中的特定模块运行测试。例如,以下命令仅针对 mylibrary 模块运行插桩单元测试。

./gradlew mylibrary:connectedAndroidTest

您还可以使用以下语法定位特定的构建变体。

对于本地单元测试:

./gradlew testVariantNameUnitTest

对于插桩单元测试:

./gradlew connectedVariantNameAndroidTest

注意:如果您没有指定要测试的目标模块,Gradle 会浏览您的所有模块,并针对与您指定的配置名称匹配的每个变体运行测试。

对于 Gradle,您还可以使用 --tests 标志定位特定的测试。例如,以下命令仅针对指定的构建变体运行 sampleTestMethod 测试。要详细了解如何使用 --tests 标志,请参阅关于测试过滤的 Gradle 文档。

./gradlew testVariantNameUnitTest --tests *.sampleTestMethod

多模块报告

如表 1 所述,Gradle 会将测试报告保存在它测试的每个模块的 build/ 目录中。但是,在对多个模块运行测试时,将所有测试结果合并到一个报告中可能很有用。要在对多个模块运行测试时生成一个报告,请按以下步骤操作:

在项目级 build.gradle 文件中,在文件中的所有其他配置之后添加以下内容。

apply plugin: 'android-reporting'

使用 mergeAndroidReports 任务调用 test 或 connectedAndroidTest 任务。例如:

./gradlew connectedAndroidTest mergeAndroidReports

如果要跳过测试失败的情况以便让 Gradle 运行完所有剩余测试,请添加 --continue 选项:

./gradlew connectedAndroidTest mergeAndroidReports --continue

当 Gradle 运行完所有测试后,它会将合并的报告保存在 PATH_TO_YOUR_PROJECT/build/ 目录中。

使用 ADB 运行测试

当您使用 Android 调试桥 (adb) 从命令行运行测试时,您可以获得比任何其他方法更多的选项来选择要运行的测试。您可以选择单独的测试方法,根据测试注解筛选测试,或指定测试选项。由于测试任务完全由命令行控制,因此您可以通过各种方式使用 Shell 脚本自定义测试。

要通过命令行运行测试,请运行 adb shell 以在设备或模拟器上启动命令行 shell,然后在 shell 中运行 am instrument 命令。您可以使用命令行标志控制 am 和您的测试。

作为一种快捷方式,您可以在同一个输入行上启动 adb shell,调用 am instrument 和指定命令行标志。shell 会在设备或模拟器上打开,运行测试,生成输出,然后返回到计算机上的命令行。

要使用 am instrument 运行测试,请执行以下操作:

重新构建主应用和测试软件包(如有必要)。

将测试软件包和主应用 Android 软件包文件(.apk 文件)安装到当前的 Android 设备或模拟器中。

在命令行中,输入:

$ adb shell am instrument -w /

其中, 是测试应用的 Android 软件包名称, 是您正在使用的 Android 测试运行程序类的名称。Android 软件包名称是测试软件包的清单文件 (AndroidManifest.xml) 中 manifest 元素的 package 属性的值。Android 测试运行程序类通常是 AndroidJUnitRunner。

测试结果会显示在 STDOUT 中。

此操作会启动 adb shell,然后以指定参数运行 am instrument。这种特殊形式的命令将运行测试软件包中的所有测试。您可以使用传递给 am instrument 的标志控制此行为。这些标志将在下一节中介绍。

使用 am instrument 命令

am instrument 命令的常规语法如下:

am instrument [flags] /

am instrument 的主要输入参数如下表中所述:

参数

说明

测试软件包的 Android 软件包名称。

测试软件包的清单文件中 manifest 元素的 package 属性的值。

您正在使用的插桩测试运行程序的类名。

am instrument 的标志如下表中所述:

标志

说明

-w

(无)

强制 am instrument 一直等到插桩终止后再终止自身。实际影响是在测试完成前使 shell 一直保持打开状态。虽然此标志不是必需的,但如果不使用它,您就看不到测试结果。

-r

(无)

原始格式的输出结果。如果要收集性能测量值,请使用此标志,这样系统就不会将它们的格式设置为测试结果。此标志应与 -e perf true 标志(如 Instrument 选项部分中所述)一起使用。

-e

提供键值对形式的测试选项。am instrument 工具会通过其 onCreate() 方法将这些选项传递给指定的插桩类。您可以指定 -e 多次。键和值在 am instrument 选项部分中进行了介绍。您只能将这些键值对用于 AndroidJUnitRunner 或

--no-hidden-api-checks

(无)

停用对使用隐藏 API 的限制。如需详细了解什么是隐藏 API 及其对您的应用产生的影响,请参阅对非 SDK 接口的限制。

am instrument 选项

am instrument 工具使用 -e 标志以键值对的形式将测试选项传递给 AndroidJUnitRunner 或

-e

某些键接受多个值。您可以在英文逗号分隔列表中指定多个值。例如,以下 AndroidJUnitRunner 调用为 package 键提供了多个值:

$ adb shell am instrument -w -e package com.android.test.package1,com.android.test.package2 \

> com.android.test/android.support.test.runner.AndroidJUnitRunner

下表列出了可与测试运行程序搭配使用的键值对。

说明

package

测试应用中某个软件包的完全限定 Java 软件包名称。系统会执行使用此软件包名称的所有测试用例类。请注意,这不是 Android 软件包名称;测试软件包只有一个 Android 软件包名称,但其中可能包含多个 Java 软件包。

class

其中一个测试用例类的完全限定 Java 类名称。系统仅会执行此测试用例类。

#method name

完全限定测试用例类名称及其方法之一。系统仅会执行此方法。注意类名和方法名之间的哈希标记 (#)。

size

[small | medium | large]

运行按大小添加注解的测试方法。注解为 @SmallTest、@MediumTest 和 @LargeTest。

perf

true

运行所有实现 am instrument 指定 -r 标志,以原始格式保存输出,而不重新调整为测试结果。

debug

true

在调试模式下运行测试。

log

true

加载并记录所有指定的测试,但不运行它们。测试信息会显示在 STDOUT 中。使用此选项可验证其他过滤器和测试规范的组合。

emma

true

运行 EMMA 代码覆盖率分析并将输出写入设备上的 /data//coverage.ec。要替换文件位置,请使用以下条目中所述的 coverageFile 键。

注意:此选项需要对测试应用进行 EMMA 插桩构建,您可以使用 coverage 目标生成该构建。

coverageFile

替换设备上 EMMA 覆盖率文件的默认位置。将此值指定为 UNIX 格式的路径和文件名。emma 键的条目中描述了默认文件名。

-e 标志使用说明

am instrument 会在调用

package 键优先于 class 键。如果您指定了一个软件包,然后在该软件包中单独指定一个类,Android 将运行该软件包中的所有测试并忽略 class 键。

func 键和 unit 键是互斥的。

用法示例

以下部分提供了使用 am instrument 运行测试的示例。它们基于以下结构:

测试软件包的 Android 软件包名称为 com.android.demo.app.tests

两个插桩测试类:

Foo1(包含测试方法 bar1)和

Foo2(包含测试方法 bar2 和 bar3)

运行整个测试软件包

要运行测试软件包中的所有测试类,请输入:

$ adb shell am instrument -w com.android.demo.app.tests/android.support.test.runner.AndroidJUnitRunner

运行测试用例类中的所有测试

要运行 UnitTests 类中的所有测试,请输入:

$ adb shell am instrument -w \

> -e class com.android.demo.app.tests.Foo \

> com.android.demo.app.tests/android.support.test.runner.AndroidJUnitRunner

am instrument 会获取 -e 标志的值,检测 class 关键字并运行 UnitTests 类中的所有方法。

选择一部分测试

要运行 Foo1 中的所有测试以及 Foo2 中的 bar3 方法,请输入:

$ adb shell am instrument -w \

> -e class com.android.demo.app.tests.Foo1,com.android.demo.app.tests.Foo2#bar3 \

> com.android.demo.app.tests/android.support.test.runner.AndroidJUnitRunner

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值