4、CTS测试套件结构:CTS测试用例分类、Camera相关测试模块、测试计划与测试包
CTS(Compatibility Test Suite)是Android兼容性测试的核心工具集,其套件结构设计遵循模块化、分层化的原则。对于Camera HAL开发者而言,理解CTS的测试用例分类体系、Camera专用测试模块的组织方式以及测试计划与测试包的生成逻辑,是高效定位HAL层兼容性问题的前提。
4.1 CTS测试用例分类体系
CTS测试用例按照测试范围、执行方式和目标组件分为多个维度。下表列出了主要的分类维度及其在Camera HAL开发中的关注点:
| 分类维度 | 子类别 | Camera HAL开发关注点 |
|---|---|---|
| 按测试范围 | 单元测试(Unit Test) | 验证单个HAL接口的输入输出,如configure_streams的参数校验 |
| 集成测试(Integration Test) | 验证Camera HAL与Framework、ISP、Sensor的协同工作 | |
| 按执行方式 | 在线测试(On-device Test) | 在真实设备上运行,依赖硬件资源,如预览、拍照、录像 |
| 离线测试(Off-device Test) | 在Host端分析dump数据,如YUV/RAW图像质量分析 | |
| 按目标组件 | Framework API测试 | 验证android.hardware.camera2.* API的正确性 |
| HAL层测试 | 直接调用ICameraDevice、ICameraProvider等HIDL接口 |
开发提示:在Camera HAL开发中,集成测试和HAL层测试是最常失败的类型。集成测试失败通常意味着HAL与Framework的协议交互存在偏差,而HAL层测试失败则直接指向HAL实现逻辑错误。
4.2 Camera相关测试模块:android.hardware.camera2.*
Camera CTS测试模块以android.hardware.camera2为根包名,按功能域划分为多个子模块。每个子模块对应一个独立的测试APK,包含一组针对特定Camera特性的测试用例。
下表列出了Camera HAL开发中最常涉及的测试模块及其核心验证目标:
| 测试模块(Test Module) | 包名 | 核心验证目标 |
|---|---|---|
| Camera2基本功能 | android.hardware.camera2.cts |
CameraManager、CameraDevice、CaptureSession的基本生命周期 |
| Camera2参数验证 | android.hardware.camera2.cts.parameters |
AE/AWB/AF参数范围、StreamConfigurationMap、物理Camera参数 |
| Camera2扩展功能 | android.hardware.camera2.cts.extension |
HDR+、Night Mode、Bokeh等扩展模式 |
| Camera2多Camera | android.hardware.camera2.cts.multicamera |
逻辑Camera与物理Camera的同步、多路流并发 |
| Camera2性能测试 | android.hardware.camera2.cts.performance |
Capture请求延迟、帧率稳定性、AE收敛时间 |
| Camera2图像质量 | android.hardware.camera2.cts.imagequality |
YUV/RAW/JPEG的噪声、动态范围、色彩精度 |
模块依赖关系:Camera2基本功能模块是所有其他Camera测试模块的依赖基础。如果基本功能模块测试失败,其他模块的测试结果将不可信。在HAL开发中,应优先确保
android.hardware.camera2.cts模块通过率超过95%。
以下SVG图展示了Camera CTS测试模块的层级依赖关系:
4.3 测试计划(Test Plan)与测试包(Test Package)
CTS使用测试计划(Test Plan)来组织和管理测试用例的执行。一个测试计划是一个XML配置文件,定义了需要执行的测试模块列表、执行顺序、过滤规则以及设备要求。测试包(Test Package)则是测试计划的物理载体,通常以ZIP或JAR格式分发。
4.3.1 测试计划的结构
一个典型的CTS测试计划文件(如camera2.xml)包含以下核心元素:
<?xml version="1.0" encoding="utf-8"?>
<TestPlan version="1.0">
<name>Camera2 Full Test Plan</name>
<description>Complete Camera2 CTS test plan for Android 14</description>
<modules>
<module name="CtsCameraTestCases">
<option name="include-filter" value="android.hardware.camera2.cts.*" />
<option name="exclude-filter" value="android.hardware.camera2.cts.performance.*" />
</module>
<module name="CtsCameraPerformanceTestCases">
<option name="include-filter" value="android.hardware.camera2.cts.performance.*" />
</module>
</modules>
<requirements>
<requirement name="device-feature" value="android.hardware.camera" />
<requirement name="min-sdk" value="34" />
</requirements>
</TestPlan>
常见陷阱:在HAL开发调试阶段,不要直接运行完整的
camera2.xml测试计划。建议先创建子集测试计划,只包含当前正在调试的模块。例如,只包含android.hardware.camera2.cts.parameters模块,以缩短测试反馈周期。
4.3.2 测试包的生成与部署
CTS测试包通过build/tools/cts/build-cts-package.sh脚本生成。生成后的测试包包含以下目录结构:
| 目录/文件 | 说明 | Camera HAL开发关注点 |
|---|---|---|
testcases/ |
存放所有测试APK和测试计划XML | Camera测试APK位于testcases/CtsCameraTestCases/ |
plans/ |
存放预定义的测试计划文件 | camera2.xml、camera2-performance.xml等 |
tools/ |
CTS测试执行工具(如cts-tradefed) |
用于启动测试会话、解析结果 |
results/ |
测试结果输出目录 | 包含XML格式的详细测试报告 |
4.3.3 测试计划的执行流程
以下SVG图展示了从测试计划加载到结果输出的完整执行流程:
4.3.4 自定义测试计划的最佳实践
在Camera HAL开发中,建议遵循以下步骤创建自定义测试计划:
- 确定测试范围:根据当前HAL修改的模块,选择对应的测试模块。例如,修改了AE算法,应包含
android.hardware.camera2.cts.parameters和android.hardware.camera2.cts.performance。 - 设置过滤规则:使用
include-filter和exclude-filter精确控制测试用例范围,避免执行无关测试。 - 配置设备要求:确保
requirements部分与目标设备匹配,特别是device-feature和min-sdk。 - 验证测试计划:使用
cts-tradefed run plan --plan <plan_name> --dry-run命令验证计划配置是否正确。
效率提升技巧:在HAL开发迭代中,建议维护一个
camera2-hal-dev.xml自定义测试计划,只包含当前开发模块的测试用例。配合--retry选项,可以仅重跑失败的测试用例,将单次测试周期从30分钟缩短到3-5分钟。