Android 兼容性计划是维持 Android 生态系统积极反馈的关键驱动力。CTS 是确保大规模兼容性质量的关键工具。Android 团队不断改进 CTS 工具和测试覆盖率。定期添加测试用例显着提高了兼容设备的质量。
一般问题
本节提供一般 CTS 常见问题解答。
CTS 测试哪些类型的内容?
CTS 测试所有受支持的 Android 强类型 API 是否存在且行为正确。CTS 还测试其他非 API 系统行为,例如应用生命周期和性能。
CTS 如何获得许可?
CTS 根据与 Android 大部分代码相同的 Apache Software License 2.0 获得许可。
编解码器是否通过 CTS 验证?
是的。所有强制性编解码器都通过 CTS 验证。
特定于测试的问题
本节提供有助于更高效地运行 CTS 测试的常见问题解答。
CTS 分片和 TF 分片之间有什么区别?
CTS 分片和 TF 分片是由不同测试基础设施代码库支持的完全不同的测试计划。虽然跨不同版本的运行命令相同,但分片结果的行为却不同。CTS 分片静态地将测试用例分配给被测设备 (DUT),如下所示
- 命令:run cts
- Android 8.1 及更低版本的配置:/tools/cts-tradefed/res/config/cts.xml
TF 分片动态地将测试用例分配给可用的 DUT,如下所示
- 命令:run cts
- Android 9 的配置:/platform/test/suite_harness/+/pie-cts-dev/tools/cts-tradefed/res/config/cts-suite.xml
支持多个 ABI 的设备需要达到什么要求?
设备必须通过其声明支持的每种 ABI 模式的所有 CTS 和 CTS 验证程序测试。因此,有必要为特定的 ABI 执行应用。多 ABI 的指南如下
- 对于 CTS 和 CTS 验证程序,每种架构都有 ARM 和 x86 版本。它们都支持 32 位或 64 位模式。
- 对于 CTS 测试,如果设备同时支持 ARM 和 x86,则必须分别运行并通过 ARM 和 x86 CTS 测试。
有关 ABI 的 CDD 要求,请参阅 CDD 3.3.1. 应用程序二进制接口。
仅在主 ABI(例如 64 位)上运行测试是否足以减少测试执行时间?
否。Android 应用在其自己的 32 位或 64 位运行时环境中运行。32 位和 64 位之间的实际机器代码、代码路径和状态是不同的。如果您跳过一种模式,您仅覆盖了设备 ABI 的 50%。
为什么有这么多测试用例报告为“未执行”?
您应该检查“模块完成”数量,而不是“未执行”数量。
在之前的版本中,CTS 模块在完成之前就被过于积极地报告为“模块完成”。因此,即使某些设备出现问题,也会报告“模块完成”数量,而所有测试用例并未完成。新的测试框架更加保守,当出现问题时,会报告更高数量的“未执行”测试。
在以下情况下,模块运行完成会在报告中的最新调用(done="false")中报告“模块未完成”
- 模块的测试运行因设备连接问题而中断。
- 并非所有模块的预期测试运行都已执行。
使用其他过滤选项重试(使用选项
-r/--retry
),例如- --include-filter
- --exclude-filter
- -t/--test(重试尚不支持此选项)
- --retry-type failed
- --subplan
要获得这些模块的“模块完成”状态(done="true"),请为最新调用重试以下操作
run retry --retry <session_id> for Android 9 and later versions
run cts --retry <session_id> for Android 8.1 and previous versions
在新的报告中,即使剩余测试为 0,没有遇到任何先前提及问题的模块也会标记为“模块完成”。
例外
- CtsNNAPITestCases 存在一个已知问题,原因是 linux/OS 对 args 的限制。可以通过直接运行
run cts -m CtsNNAPITestCases
来隔离重新运行该模块。
如何避免测试准备在企业防火墙后失败?
所有自动化测试套件都尝试在运行时下载 CTS 媒体文件或业务逻辑文件。在许多企业环境中,防火墙和代理很常见,这会导致测试准备失败。执行以下行或将其添加到 .profile(在 Ubuntu 上)。
export JAVA_TOOL_OPTIONS='-Djava.net.useSystemProxies=true'
安全元件的 CTS 是否需要 SIM 卡?
测试是否需要 SIM 卡取决于对测试设备中是否支持该功能的理解。
- 如果您的设备**不需要**支持 Android 应用访问安全元件 - 无论是移动网络运营商(运营商)分发的 UICC(例如 SIM 卡)还是嵌入在设备中 - 您可以配置 HIDL 清单,使其不包含
android.hardware.secure_element
HAL 元素。在这种情况下,android.se.omapi.SEService.getReaders() API 会报告一个空列表,并且 CTS 测试会自动通过并报告 CTS 通过。 - 如果您的设备**需要**支持 Android 应用访问安全元件 - 无论是移动网络运营商(运营商)分发的 UICC(例如 SIM 卡)还是嵌入在设备中 - 您需要正确实现安全元件并在内部对其进行测试。安全元件的 CTS 测试概述了如何准备运行 CTS 测试,以确保 Android 9 中添加的 android.se.omapi API 包功能正常。由于 CTS 测试覆盖率很小,我们还建议您自行进行额外的测试。
我在哪里可以获得安全元件的 CTS 的 SIM 卡?
您可以联系您首选的 SIM 卡供应商。
为什么在使用令牌分片执行 CTS 期间,锁定屏幕上会出现 Orange SIM?
测试用例未启动,因为测试 SIM 卡已锁定。在**SIM 卡锁定设置**中禁用**锁定 SIM 卡**,然后再使用令牌分片执行 CTS。