CTS 设备交互助手模块

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

希望在产品开发期间自定义 Android UI 并且需要通过 CTS 的 OEM 也许能够实现助手模块。如果您使用默认的 Android 实现,则无需执行任何额外操作。

实现助手模块

自定义 UI 的要求

查看 CDD 或主线模块,了解是否有任何 UI 要求。如果所需的 UI 已在 CDD 或主线模块中涵盖,则无法自定义该 UI。

如果与所需 UI 交互的 CTS 测试未使用助手框架,则无法自定义该 UI。在更改 UI 之前,与测试所有者合作转换测试模块。

否则,您可以自定义 UI。

实现工作流程

  1. 根据您的特定产品需求自定义 UI。
  2. 将现有的 AOSP 助手模块指定为需要与 UI 交互的 CTS 测试模块的子类。根据自定义的 UI 适当地替换必要的交互。替换因更改类型而异。
    • OEM 子类位于 OEM 软件包中,例如 com.[oem].cts.helpers
    • 每个 OEM 子类都以一个通用前缀命名,该前缀将其与 AOSP 实现区分开来,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

如果您自定义打印 UI,则可以创建子类化 DefaultCtsPrintHelpercom.oem.cts.helpers.OemCtsPrintHelperAndroid.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 测试连接到其助手,测试所有者可以使用 @Rule 定义,该定义记录在 cts/libs/helpers/core/src/com/android/cts/helpers/DeviceInteractionHelperRule.java 中。

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

运行 CTS 测试

在没有助手的情况下进行测试

除了一个属性之外,设备运行时不存在在没有助手的情况下进行测试的选项,但这可以选择性地修改 CTS 测试与设备的交互方式。如果您需要在没有助手实现的情况下运行 CTS,则有两种选择

  • 从设备中删除 ro.vendor.cts_interaction_helper_packages 属性。这将完全阻止在该版本上使用助手。
  • 在运行 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。检查合作伙伴实现是否通过了带有 UI 自定义项的 CTS。运行涵盖您自定义的 UI 或功能的任何 CTS 模块。

某些 CTS 模块或助手可能尚不支持某些自定义项。

  • 与您要自定义的 UI 交互的 CTS 模块可能未使用助手框架。预计 CTS 模块会根据需求和测试所有者的优先级转换为助手框架。在该过程的早期提交转换请求,以确保转换被纳入计划,类似于请求 CTS 更改以支持您计划的功能。
  • 现有助手提供的功能可能无法完全满足您想要进行的自定义项。助手功能应抽象出 UI 依赖项。如果助手功能间接具有 UI 依赖项,则可以将其视为 CTS 中的错误。