每个新的测试模块都必须具有配置文件,以使用模块元数据、编译时依赖项和打包指令来指引构建系统。现在,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: ["androidx.test.runner"],
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: ["androidx.test.runner"],
static_libs
设置指示构建系统将已命名模块的内容合并到当前模块生成的 APK 中。这意味着,每个已命名模块都会生成 .jar
文件,其内容将用于在编译期间解析类路径引用,以及合并到生成的 APK 中。
androidx.test.runner
模块是 AndroidX Test Runner 库(包含测试运行程序 AndroidJUnitRunner
)的预构建文件。AndroidJUnitRunner
支持 JUnit4 测试框架,并在 Android 10 中取代了 InstrumentationTestRunner
。如需详细了解如何测试 Android 应用,请参阅在 Android 平台上测试应用。
如需构建一个新的插桩模块,则开始时应始终将 androidx.test.runner
库作为测试运行程序。平台源代码树还包括其他有用的测试框架,如 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
,系统将跳过测试。