4. CTS测试框架:Trade Federation (TF) 架构、测试用例生命周期、配置解析
Trade Federation(简称 TF)是 Android CTS 的官方测试框架,负责测试用例的调度、执行、结果收集与报告生成。理解 TF 的架构与生命周期,是搭建 CTS 环境、定位测试失败根因的必备技能。
4.1 TF 整体架构
TF 采用模块化、可插拔的架构设计,核心组件包括:
- Harness:框架入口,负责加载配置、初始化模块、启动测试循环。
- Test Invocation:一次完整的测试运行实例,包含前置检查、测试执行、后置清理。
- ITestSuite / ITestFilter:测试套件与过滤器接口,支持按模块、标签、优先级筛选用例。
- IDeviceTest / IRemoteTest:测试用例基类,分别对应设备端与远程端执行。
- ITestInvocationListener:结果监听器,负责收集测试结果、生成 XML 报告。
- Configuration:基于 XML 的配置系统,定义设备、测试包、参数、监听器。
关键理解:TF 的架构设计遵循“配置驱动、监听分离”原则。测试逻辑与设备管理、结果收集完全解耦,便于扩展自定义测试模块。
4.2 测试用例生命周期
每个 CTS 测试用例在 TF 框架中经历完整的生命周期阶段。理解各阶段回调顺序,有助于在 HAL 层调试时准确插入日志或断点。
| 阶段 | 回调方法 | 说明 |
|---|---|---|
| 1. 前置检查 | preInvocationSetup() |
检查设备连接状态、系统属性、权限等前置条件 |
| 2. 测试初始化 | setUp() |
创建测试环境、安装 APK、推送测试文件 |
| 3. 测试执行 | testXxx() |
执行具体的 Camera HAL 接口调用与断言 |
| 4. 结果收集 | testResult() |
收集测试结果、异常堆栈、性能指标 |
| 5. 后置清理 | tearDown() |
卸载 APK、清理临时文件、恢复设备状态 |
| 6. 报告生成 | invocationEnded() |
生成 XML 报告,写入 test_result.xml |
调试技巧:在 HAL 层调试时,重点关注
setUp() 阶段是否成功打开 Camera HAL 服务,以及 tearDown() 阶段是否正确释放资源。这两个阶段是 CTS 测试失败的高发区。
4.3 配置解析机制
TF 使用 XML 配置文件驱动测试行为。配置文件定义了测试套件、设备参数、过滤器、监听器等全部运行时信息。解析流程如下:
- 加载 XML:Harness 读取
testcases/目录下的.xml配置文件。 - 构建 Configuration 对象:解析
<configuration>根标签下的子元素。 - 注册模块:根据
<test>、<device>、<listener>等标签实例化对应类。 - 注入参数:将
<option>标签中的键值对注入到模块对象。 - 启动 Invocation:Configuration 就绪后,Harness 创建 Test Invocation 开始执行。
配置示例:Camera ITS 测试的典型配置文件片段如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration description="Camera ITS test config">
<test class="com.android.tradefed.testtype.AndroidJUnitTest">
<option name="package" value="android.hardware.camera.cts" />
<option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
<option name="test-filter" value="android.hardware.camera.cts.CameraTest" />
</test>
<device class="com.android.tradefed.device.DeviceManager">
<option name="serial" value="emulator-5554" />
<option name="max-battery" value="50" />
</device>
<listener class="com.android.tradefed.result.XmlResultReporter">
<option name="output-file" value="/tmp/cts_result.xml" />
</listener>
</configuration>
4.4 常见配置参数速查
| 参数 | 所属标签 | 说明 | 示例值 |
|---|---|---|---|
package |
<test> |
测试 APK 的包名 | android.hardware.camera.cts |
runner |
<test> |
测试运行器类名 | androidx.test.runner.AndroidJUnitRunner |
test-filter |
<test> |
过滤特定测试类或方法 | CameraTest#testPreview |
serial |
<device> |
设备序列号 | emulator-5554 |
max-battery |
<device> |
最低电量要求(百分比) | 50 |
output-file |
<listener> |
测试报告输出路径 | /tmp/cts_result.xml |
常见陷阱:配置文件中
test-filter 的格式必须严格遵循 类名#方法名 或 包名.类名。格式错误会导致 TF 无法匹配测试用例,表现为“0 tests found”错误。
4.5 调试配置的实用命令
在 CTS 环境搭建与调试过程中,以下 TF 命令可帮助验证配置是否正确:
- 列出可用配置:
tradefed.sh list configs— 显示testcases/目录下所有 XML 配置。 - 验证配置解析:
tradefed.sh run config <config_name> --dry-run— 模拟运行,不实际执行测试,只打印解析结果。 - 查看配置详情:
tradefed.sh run config <config_name> --help— 显示该配置支持的所有 option 及其默认值。 - 动态覆盖参数:
tradefed.sh run config <config_name> --test-filter CameraTest#testPreview— 在命令行覆盖 XML 中的 filter 设置。
实战建议:在调试 Camera HAL 层问题时,优先使用
--dry-run 验证配置是否正确加载,再使用 --test-filter 精确定位单个测试用例,避免全量运行浪费时间。