每个新的测试模块都必须有一个配置文件,以使用模块元数据、编译时依赖项和打包说明来指导构建系统。Android 现在使用 Soong 构建系统,以简化测试配置。
Soong 使用 Blueprint 或 .bp
文件,这些文件是类似 JSON 的简单声明性模块描述,用于构建模块。此格式取代了以前版本中使用的基于 Make 的系统。如需了解完整详情,请参阅 持续集成信息中心上的 Soong 参考文件。
为了适应自定义测试或使用 Android 兼容性测试套件 (CTS),请改为遵循复杂的测试配置。
示例
以下条目来自此示例 Blueprint 配置文件:/platform_testing/tests/example/instrumentation/Android.bp
此处包含一个快照,以方便查看
android_test {
name: "HelloWorldTests",
srcs: ["src/**/*.java"],
sdk_version: "current",
static_libs: ["androidx.test.runner"],
certificate: "platform",
test_suites: ["device-tests"],
}
请注意,开头的 android_test
声明表示这是一个测试。相反,包含 android_app
将表示这是一个构建软件包。
设置
以下设置需要解释
name: "HelloWorldTests",
当指定 android_test
模块类型(在代码块的开头)时,name
设置是必需的。它为您的模块命名,生成的 APK 将使用相同的名称并带有 .apk
后缀。例如,在本例中,生成的测试 apk 被命名为 HelloWorldTests.apk
。此外,它还为您的模块定义了一个 make 目标名称,以便您可以使用 make [options] <HelloWorldTests>
来构建您的测试模块及其所有依赖项。
static_libs: ["androidx.test.runner"],
static_libs
设置指示构建系统将指定模块的内容合并到当前模块生成的 apk 中。这意味着每个指定的模块都应生成一个 .jar
文件,其内容将用于在编译时解析类路径引用,并合并到生成的 apk 中。
androidx.test.runner
模块是 AndroidX Test Runner 库的预构建模块,其中包括测试运行器 AndroidJUnitRunner
。AndroidJUnitRunner
支持 JUnit4 测试框架,并在 Android 10 中取代了 InstrumentationTestRunner
。要了解有关测试 Android 应用的更多信息,请访问 Android 应用测试。
如果您要构建新的 instrumentation 模块,则应始终以 androidx.test.runner
库作为测试运行器开始。平台源代码树还包括其他有用的测试框架,例如 ub-uiautomator
、mockito-target
、easymock
等。
certificate: "platform",
certificate
设置指示构建系统使用与核心平台相同的证书对 apk 进行签名。如果您的测试使用受签名保护的权限或 API,则需要这样做。请注意,这适用于平台持续测试,但不应用于 CTS 测试模块。请注意,此示例使用此证书设置仅用于说明目的:示例的测试代码实际上并不需要使用特殊的平台证书对测试 apk 进行签名。
如果您正在为系统服务器外部的组件编写 instrumentation,也就是说,它或多或少像常规应用 apk 一样打包,只是它内置于系统映像中,并且可能是特权应用,那么您的 instrumentation 很可能会以组件的应用软件包(请参阅下面有关清单的部分)为目标。在这种情况下,您的应用程序 makefile 可能有自己的 certificate
设置,并且您的 instrumentation 模块应保留相同的设置。这是因为要将 instrumentation 定位到被测应用,您的测试 apk 和应用 apk 必须使用相同的证书进行签名。
在其他情况下,您根本不需要此设置:构建系统将根据构建变体,简单地使用默认的内置证书对其进行签名,这通常称为 dev-keys
。
test_suites: ["device-tests"],
test_suites
设置使 Trade Federation 测试框架可以轻松发现测试。可以在此处添加其他套件(例如 CTS),以便可以共享此测试。
${ANDROID_PRODUCT_OUT}/testcases/HelloWorldTests/HelloWorldTests.apk
可选设置
以下可选设置需要解释
test_config: "path/to/hello_world_test.xml"
test_config
设置指示构建系统您的测试目标需要特定的配置。默认情况下,与 Android.bp
相邻的 AndroidTest.xml
与该配置关联。
auto_gen_config: true
auto_gen_config
设置指示是否自动创建测试配置。如果 Android.bp
旁边不存在 AndroidTest.xml
,则无需显式地将此属性设置为 true。
require_root: true
require_root
设置指示构建系统将 RootTargetPreparer 添加到自动生成的测试配置中。这保证了测试以 root 权限运行。
test_min_api_level: 29
test_min_api_level
设置指示构建系统将 MinApiLevelModuleController 添加到自动生成的测试配置中。当 Trade Federation 运行测试配置时,如果设备属性 ro.product.first_api_level
< test_min_api_level
,则将跳过测试。