简单的 build 配置

每个新的测试模块都必须具有配置文件,以使用模块元数据、编译时依赖项和打包指令来指引构建系统。现在,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-uiautomatormockito-targeteasymock 等。

    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,系统将跳过测试。