25、测试框架:CTS/VTS 测试、车载专项测试、模拟器测试、自动化测试框架

测试这件事,说实话,在车载开发里经常被低估。

很多人觉得功能跑通了就行,但Android Automotive OS不一样。你想想看,车机一旦出问题,不是闪退那么简单,可能影响安全。我见过不少项目,开发阶段风风火火,一到测试就卡壳,最后交付延期。

这一章,我就把车载测试的几大块给你捋清楚。CTS、VTS、车载专项、模拟器、自动化框架,咱们一个一个说。

核心观点:车载测试不是「补丁」,而是质量防线。CTS/VTS保兼容,专项测试保体验,自动化保效率。

车载测试框架全景 Android Automotive OS 测试 CTS 兼容性测试 App兼容、API一致性 VTS 供应商测试 HAL、内核、Treble 车载专项测试 多屏、音频、CAN、稳定性 自动化测试框架 Tradefed、ATX、自研 四者协同:CTS/VTS保基础 → 专项测场景 → 自动化提效率 → 模拟器加速迭代

25.1 CTS:兼容性的底线

CTS,全称Compatibility Test Suite。说白了,就是Google用来检查你的设备「够不够Android」的一套测试。

为什么重要?因为车机上的App很多是从手机生态来的。如果CTS过不了,第三方App可能闪退、界面错乱。我遇到过一家Tier1,CTS跑了一周没过,最后发现是某个系统服务改了返回值格式——这种坑,防不胜防。

我的习惯:每次修改framework层代码后,先跑CTS中对应的模块测试,不要等全部改完再跑。否则问题堆在一起,定位成本翻倍。

CTS的核心测试项包括:

  • App兼容性:检查系统API是否完整、行为是否一致
  • 权限模型:运行时权限、后台位置等是否合规
  • 多窗口:车载场景下分屏、画中画是否正常
  • 输入法:旋钮、触摸、语音输入是否兼容

跑CTS的命令其实很简单:

# 在车机上执行
adb shell am instrument -w com.android.cts/.runner.CtsTestRunner

# 或者用Tradefed统一调度
tradefed.sh run cts --plan CTS

注意:CTS版本必须与Android版本匹配。Android 14的CTS不能在13上跑,反之亦然。我曾经因为版本不对,白跑了两天。

25.2 VTS:供应商的「体检报告」

VTS,Vendor Test Suite。这是Google为了推进Project Treble搞的。它主要测的是HAL层、内核、驱动这些底层东西。

你想想看,车机芯片五花八门——高通、瑞萨、恩智浦、TI。每家BSP都不一样。VTS就是确保不管底层怎么换,上层Android都能正常跑。

VTS测试的几个关键模块:

测试模块 测试内容 常见失败原因
HAL测试 Audio、Camera、GPS、Sensors等HAL接口 HAL实现未完全遵循AIDL接口定义
内核测试 SELinux策略、内核配置、设备节点 SELinux规则过于宽松或缺失
Treble测试 系统分区与供应商分区隔离性 vendor分区引用了system分区的私有库
性能测试 启动时间、内存占用、中断延迟 BSP优化不足,中断响应慢

跑VTS的命令类似:

tradefed.sh run vts --plan VTS

避坑指南:我曾经遇到一个项目,VTS的SELinux测试一直不过。查了三天,发现是某个vendor进程的context写错了。记住:SELinux策略文件一定要和实际进程一一对应,别偷懒用通配符。

25.3 车载专项测试:手机没有的坑

CTS和VTS是Google要求的,但车载场景有很多Google没覆盖到的地方。这部分,就得我们自己来。

我把它分成几个维度:

25.3.1 多屏交互测试

车机至少两个屏——中控和仪表。高端车型还有HUD、后排娱乐屏。每个屏的分辨率、刷新率、触控方式都可能不同。

  • 跨屏拖拽:导航从中控拖到仪表是否流畅
  • 焦点管理:旋钮操作时,焦点在哪个屏上
  • 显示同步:仪表和中控显示的时间、车速是否一致

25.3.2 音频通路测试

车载音频比手机复杂得多。导航、电话、媒体、语音助手,各有各的通路。

  • 混音策略:导航播报时音乐是否自动降低音量
  • 延迟测试:语音助手的「听到」到「回应」延迟
  • 多区音频:前排听音乐,后排看视频互不干扰

25.3.3 CAN总线与车辆信号测试

车机要和车辆通信——车速、车门、空调、方向盘按键。这些走CAN总线。

  • 信号映射:CAN信号是否正确映射到Android的Vehicle HAL
  • 延迟测试:从按下方向盘按键到屏幕响应,要求<100ms
  • 异常处理:CAN总线断开时,车机不能死机

25.3.4 稳定性与压力测试

车机不能像手机一样动不动重启。我见过一个项目,连续播放音乐12小时后,音频服务挂了。

  • Monkey测试:随机事件注入,跑24小时以上
  • 冷热启动:反复开关机,检查系统是否正常恢复
  • 内存泄漏:用dumpsys meminfo监控长期运行后的内存变化

我的经验:车载专项测试最好在实车上跑,模拟器很多场景模拟不了。比如GPS信号、CAN总线、真实音频延迟。至少留两周的实车测试时间。

25.4 模拟器测试:开发者的「快车道」

实车资源有限,不可能每个开发者都配一台车。模拟器就是用来解决这个问题的。

Android Automotive OS的模拟器有几个特点:

  • 多屏模拟:可以配置中控+仪表双屏
  • 车辆信号模拟:通过VHAL模拟车速、车门等信号
  • GPS模拟:设置虚拟位置,测试导航
  • 音频模拟:模拟多通路音频输出

启动模拟器的命令:

# 使用Android Studio AVD Manager创建Automotive设备
# 或者命令行启动
emulator -avd Automotive_AVD -gpu host -memory 2048

注意:模拟器不能替代实车测试。尤其是音频延迟、触控响应、CAN信号实时性,模拟器和实车差距很大。我建议:功能开发用模拟器,集成测试用实车。

25.5 自动化测试框架:解放双手

手动测试一次两次还行,但车机要跑几百个测试用例,手动搞不现实。自动化是必须的。

Android官方推荐的是Tradefed。它是一个测试调度框架,支持CTS、VTS、GTS等所有Google测试套件。

Tradefed的基本用法:

# 运行自定义测试
tradefed.sh run commandAndExit \
  --template:template_name \
  --primary-abi-only

# 查看测试结果
tradefed.sh run cts --plan CTS --skip-system-status-check

除了Tradefed,还有一些第三方框架:

框架 特点 适用场景
Tradefed 官方、稳定、支持多设备 CTS/VTS/集成测试
ATX (Android TestX) 开源、支持UI自动化、截图对比 UI回归测试
自研框架 灵活、可定制、对接CI/CD 车载专项测试

我个人的建议是:

  • CTS/VTS用Tradefed,别折腾
  • UI自动化用ATX或Espresso,写起来快
  • 车载专项测试(多屏、音频、CAN)自研框架,因为场景太特殊

避坑指南:我曾经在一个项目里,用Tradefed跑车载专项测试,结果发现它不支持多屏截图对比。后来我们基于Python+ADB自研了一套框架,专门用来测多屏交互。记住:工具是死的,场景是活的。

25.6 测试流程:从开发到交付

最后,我分享一下我常用的测试流程:

  1. 开发阶段:模拟器+单元测试,快速验证功能
  2. 集成阶段:Tradefed跑CTS/VTS,确保兼容性
  3. 专项阶段:实车跑车载专项测试,覆盖多屏、音频、CAN
  4. 压力阶段:Monkey+稳定性测试,跑24-48小时
  5. 回归阶段:自动化框架跑全量用例,确保没有引入新问题

这个流程,我用了好几个项目,效果不错。你可以根据自己的项目节奏调整,但核心逻辑不变:先保兼容,再保体验,最后保稳定。

最后说一句:测试不是测试团队的事,是每个开发者的责任。你写的每一行代码,都可能影响车机的稳定性和安全性。跑一遍测试,花不了多少时间,但能省下后面几天的排查时间。


公众号:蓝海资料掘金营,微信deep3321