CTS 设备交互帮助模块

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

想要在产品开发过程中自定义 Android UI 并需要通过 CTS 的 OEM 可能可以实现帮助模块。如果您使用默认的 Android 实现,则不需要额外的工作。

实现辅助模块

自定义 UI 的要求

检查 CDD 或 Mainline 模块是否有任何 UI 要求。如果所需的 UI 包含在 CDD 或 Mainline 模块中,则无法自定义该 UI。

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

否则,您可以自定义 UI。

实施工作流程

  1. 根据您的特定产品的需要自定义 UI。
  2. 将现有的 AOSP 帮助程序模块指定为需要与 UI 交互的 CTS 测试模块的子类。为定制的 UI 适当地替换必要的交互。更换因更改类型而异。
    • 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. 确保在运行 Tradefed for CTS 时 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 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属性。这可以防止助手完全用于该构建。
  • 在运行 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 中的错误。