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测试模块的层级依赖关系:

Camera CTS 测试模块层级依赖关系 android.hardware.camera2.cts parameters extension multicamera performance imagequality 模块依赖说明 1. 根模块是所有Camera测试的基础,必须先通过 2. 第二层模块依赖根模块,但彼此独立 3. 第三层模块依赖对应的第二层模块,不可跨层依赖

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图展示了从测试计划加载到结果输出的完整执行流程:

CTS测试计划执行流程 加载测试计划XML 解析模块列表与过滤规则 检查设备要求 按模块顺序执行测试 生成测试结果报告 提示:设备要求检查失败会跳过整个测试计划,不会执行任何测试用例

4.3.4 自定义测试计划的最佳实践

在Camera HAL开发中,建议遵循以下步骤创建自定义测试计划:

  1. 确定测试范围:根据当前HAL修改的模块,选择对应的测试模块。例如,修改了AE算法,应包含android.hardware.camera2.cts.parameters和android.hardware.camera2.cts.performance。
  2. 设置过滤规则:使用include-filter和exclude-filter精确控制测试用例范围,避免执行无关测试。
  3. 配置设备要求:确保requirements部分与目标设备匹配,特别是device-feature和min-sdk。
  4. 验证测试计划:使用cts-tradefed run plan --plan <plan_name> --dry-run命令验证计划配置是否正确。
效率提升技巧:在HAL开发迭代中,建议维护一个camera2-hal-dev.xml自定义测试计划,只包含当前开发模块的测试用例。配合--retry选项,可以仅重跑失败的测试用例,将单次测试周期从30分钟缩短到3-5分钟。