CTS 设备交互帮助程序模块

对于 Android 11 或更高版本,兼容性测试套件 (CTS) 设备交互帮助程序模块可让您自定义某些 CTS 测试与特定设备上的界面交互的方式。这意味着可以在执行操作(例如替换 Android 兼容性定义文档 [CDD] 或 API 文档中未涵盖的界面元素)的同时仍会通过 CTS 测试。

希望在产品开发过程中自定义 Android 界面并需要通过 CTS 测试的原始设备制造商 (OEM) 或许能够实现帮助程序模块。如果您使用默认 Android 实现,则无需执行任何额外的操作。

实现帮助程序模块

自定义界面的要求

请查看 CDD 或 Mainline 模块,了解任何界面要求。如果 CDD 或 Mainline 模块涵盖所需界面,该界面就无法自定义。

如果与所需界面互动的 CTS 测试不使用帮助程序框架,该界面就无法自定义。请与测试负责人合作,在界面可以更改之前转换测试模块。

在任何其他情况下,您可以自定义界面。

实现工作流程

  1. 根据需要为特定产品自定义界面。
  2. 将现有 AOSP 帮助程序模块指定为需要与界面互动的 CTS 测试模块的子类。相应地为自定义的界面替换必要的互动。替换项因更改类型而异。
    • OEM 子类位于 OEM 软件包中,例如 com.[oem].cts.helpers
    • 每个 OEM 子类都采用能够将其与 AOSP 实现区分开来的共有前缀命名,后者采用前缀 Default
  3. 根据以下测试运行程序规范,将帮助程序构建到 APK 中。
    • Android.bp 应使用与包含的软件包相同的名称声明 android_test_helper_app
    • APK 的 AndroidManifest.xml 必须声明一个名为 interaction-helpers-prefix 的元数据属性,该属性具有在上一项要点中选择的类前缀的值。
    • 应用应依赖于 cts-helpers-corects-helpers-interfacescom.android.cts.helpers.aosp。如果 OEM 帮助程序完全实现所有相关的接口,则 com.android.cts.helpers.aosp 为可选项。
  4. 在设备映像中设置 ro.vendor.cts_interaction_helper_packages 属性以包含 APK 的名称。如果您需要分隔多个 APK 中的帮助程序实现,则此属性可以包含以英文冒号分隔的软件包列表。
  5. 在针对 CTS 运行 Tradefed 时,确保该 APK 在 testcases 目录中可用。如有必要,请通过检查 logcat 消息来确认已选择预期的帮助程序实现类。
  6. 可选但强烈建议执行的操作:将您的帮助程序实现提交到 AOSP,或使其可用于第三方测试。

帮助程序实现示例

例如,CtsPrintTestCases 需要一个具有 ICtsPrintHelper 中定义的接口的帮助程序。AOSP 实现称为 com.android.cts.helpers.aosp.DefaultCtsPrintHelper

如果您要自定义打印界面,则可以创建 com.oem.cts.helpers.OemCtsPrintHelper 作为 DefaultCtsPrintHelper 的子类。Android.bp 中的 android_test_helper_app 名为 com.oem.cts.helpers,它生成了 com.oem.cts.helpers.apk,并在 AndroidManifest.xml 中将 interaction-helpers-prefix 声明为 Oem

设备属性 ro.vendor.cts_interaction_helper_packages 设置为 com.oem.cts.helpers

参考实现

参考实现包括 cts/libs/helpers 下的接口和 cts/helpers 下的默认 AOSP 帮助程序。顶级接口记录在 cts/libs/helpers/core/src/com/android/cts/helpers/ICtsDeviceInteractionHelper.java 中。

如需将 CTS 测试关联到其帮助程序,测试负责人可以使用 cts/libs/helpers/core/src/com/android/cts/helpers/DeviceInteractionHelperRule.java 中记录的 @Rule 定义。

每个使用该框架及其预期的帮助程序行为的 CTS 模块均记录在 cts/libs/helpers/core/src/com/android/cts/helpers 下定义的接口中。

运行 CTS 测试

在不使用帮助程序的情况下运行测试

除了一个属性之外,设备上并不存在运行时在不使用帮助程序的情况下进行测试的选项,不过您可以选择性地修改 CTS 测试与设备互动的方式。如果您需要在不使用帮助程序实现的情况下运行 CTS,则有以下两种选择:

  • 从设备中移除 ro.vendor.cts_interaction_helper_packages 属性。这可以彻底防止帮助程序被用于该 build。
  • 在运行 CTS 之前,从 testcases 目录中移除帮助程序 APK。这可以防止帮助程序在 APK 恢复到 testcases 之前被任何运行使用。

您可以使用 Tradefed 参数和 ro.vendor.cts_interaction_helper_packages 属性控件(加载帮助程序 APK 的位置)更改默认设置。

如需了解各项可用设置的预期值或范围,请参阅以下内容。

  • ro.vendor.cts_interaction_helper_packages 是以英文冒号分隔的字符串,包含软件包名称。它可以采用属于 OEM 帮助程序实现的有效软件包选择的任何值。
  • cts-tradefed 接受 device-interaction-helper:property-name 参数,该参数会暂时性地更改一次测试运行的预期属性,例如 --module-arg 'CtsPrintTestCases:{device-interaction-helper}property-name:debug.cts.hlp'。属性名称值可以是您在设备上设置的任何属性。属性值遵循与上述 ro.vendor.cts_interaction_helper_packages 属性相同的限制。

在进行自定义的情况下运行测试

默认情况下,参考实现能够在原生 Android 上通过 CTS 测试。检查在进行界面自定义的情况下合作伙伴实现是否通过 CTS 测试。运行涵盖您自定义的界面或功能的任意 CTS 模块。

特定 CTS 模块或帮助程序可能尚不支持某些自定义。

  • 与您要自定义的界面互动的 CTS 模块可能不会使用帮助程序框架。应根据需求和测试负责人的优先事项将 CTS 模块转换为帮助程序框架。在流程的早期阶段提交转换请求,以确保转换可以按计划进行,这类似于请求进行 CTS 更改以支持规划的功能。
  • 现有帮助程序提供的函数可能无法完全处理您要进行的自定义。帮助程序函数应对界面依赖项进行抽象化。如果辅助函数间接拥有界面依赖项,则可以像处理 CTS 中的错误那样对此进行类似处理。