每个新的测试模块都必须具有配置文件,以使用模块元数据、编译时依赖项和打包指令来指引构建系统。现在,Android 使用 Soong 构建系统来实现更简单的测试配置。
Soong 使用与 JSON 类似的 Blueprint 文件(即 .bp
文件)来对要构建的模块进行简单的声明性描述。此格式取代了以前的版本中使用的基于 Make 的系统。如需了解完整详细信息,请参阅持续集成信息中心上的 Soong 参考文件。
如需适应自定义测试或使用 Android 兼容性测试套件 (CTS),请改为按照复杂的测试配置操作。
示例
以下条目均来自这一示例 Blueprint 配置文件:/platform_testing/tests/example/instrumentation/Android.bp
为方便起见,下面附上快照:
android_test {
name: "HelloWorldTests",
srcs: ["src/**/*.java"],
sdk_version: "current",
static_libs: ["android-support-test"],
certificate: "platform",
test_suites: ["device-tests"],
}
请注意,开头的 android_test
声明表示这是一个测试。相反,如果包含 android_app
,就表示这是一个 build 软件包。
设置
下面对各项设置进行了解释:
name: "HelloWorldTests",
如果指定了 android_test
模块类型(在代码块的开头),就需要 name
设置。此设置会为模块命名,生成的 APK 将与模块名称相同,不过带有 .apk
后缀。例如,在本例中,生成的测试 APK 将命名为 HelloWorldTests.apk
。此外,此设置还可以为模块定义 make 目标名称,以便您可以使用 make [options]
<HelloWorldTests>
构建测试模块及其所有依赖项。
static_libs: ["android-support-test"],
static_libs
设置指示构建系统将已命名模块的内容合并到当前模块生成的 APK 中。这意味着,每个已命名模块都会生成 .jar
文件,其内容将用于在编译期间解析类路径引用,以及合并到生成的 APK 中。
在本例中,可能对测试普遍有用的内容如下:
android-support-test
是 Android 测试支持库的预构建项,包括新的测试运行程序 AndroidJUnitRunner
:它替代了现已弃用的内置 InstrumentationTestRunner
,并且支持 JUnit4 测试框架。如需了解详情,请参阅在 Android 平台上测试应用。
如需构建一个新的插桩模块,则开始时应始终将 android-support-test
库作为测试运行程序。平台源代码树还包括其他有用的测试框架,如 ub-uiautomator
、mockito-target
、easymock
等。
certificate: "platform",
certificate
设置指示构建系统使用与核心平台相同的证书对 APK 进行签名。如果您的测试使用受签名保护的权限或 API,就需要此设置。请注意,此设置适合平台连续测试,但不应该用于 CTS 测试模块。另请注意,本例使用此证书设置只是为了进行说明:示例中的测试代码实际上不需要使用特殊平台证书对测试 APK 进行签名。
如果您要为系统服务器之外的组件(也就是说,它的打包方式多少有些类似于常规应用 APK,只不过它内置到系统映像中并且可能是特权应用)编写插桩,那么插桩可能会以组件的应用软件包(请参阅下面关于清单的部分)为目标。在这种情况下,应用 makefile 可能具有自己的 certificate
设置,并且插桩模块应保留相同的设置。这是因为,如需以受测应用上的插桩为目标,必须使用同一证书对测试 APK 和应用 APK 进行签名。
在其他情况下,根本不需要此设置:构建系统将直接使用默认的内置证书(基于 build 变体)对其进行签名,并且它通常称为 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
,系统将跳过测试。