3、CTS测试计划与用例管理:理解测试计划(Test Plan)、测试用例(Test Case)结构、如何选择与过滤测试用例。

说实话,刚接触CTS那会儿,我最头疼的不是跑测试本身,而是面对那一大堆测试用例,完全不知道从哪下手。你想想看,一个完整的CTS套件,动辄几十万个测试用例,全跑一遍?那得等到猴年马月去。

所以,搞懂测试计划和用例管理,是咱们做CTS兼容性测试的第一道坎。今天我就把这块掰开了揉碎了,跟你聊聊。

3.1 测试计划(Test Plan)到底是什么?

测试计划,说白了就是一张“考试科目表”。它告诉你要测哪些模块、用哪些测试用例、达到什么标准才算过。

在AOSP里,测试计划通常是一个XML文件。我习惯把它理解成“测试的配置文件”。举个例子,你执行 run cts 命令时,系统默认加载的就是 cts/tests/tests/plan/cts.xml 这个计划。

核心要点:测试计划决定了你的测试范围。选错了计划,测出来的结果就是废的。

我记得有一次,同事为了赶时间,直接用了默认的 cts.xml 去跑一个只改了Wi-Fi驱动的设备。结果跑了整整两天,大部分用例跟Wi-Fi半毛钱关系没有。这就是典型的“计划不对,努力白费”。

3.2 测试用例(Test Case)的结构

每个测试用例,其实就是一个Java类里的一个方法。但AOSP给它套了一层壳,让它变得更好管理。

一个标准的测试用例,通常包含这几个部分:

  • 包名(Package):比如 android.hardware.camera2.cts,一眼就能看出是测Camera的。
  • 类名(Class):比如 CameraDeviceTest,代表具体的测试类。
  • 方法名(Test Method):比如 testOpenCamera,就是具体的测试动作。
  • 注解(Annotation):比如 @Test@LargeTest,用来标记用例的属性和规模。

嗯,这里要注意,注解里藏着很多信息。比如 @LargeTest 表示这个用例跑起来很慢,@SmallTest 就是很快的那种。我一般调试时只跑 @SmallTest,等基本没问题了再上全量。

小技巧:你可以用 adb shell am instrument -w -r -e size small 来只跑小用例,速度能快好几倍。

3.3 如何选择与过滤测试用例?

这是实战中最常用的技能。你不可能每次都全量跑,那样太浪费时间了。

我个人习惯用以下几种方式过滤:

3.3.1 按模块过滤

比如我只想测Camera模块,那就用:

run cts --module CtsCameraTestCases

这样只会跑Camera相关的测试,省时又省力。

3.3.2 按测试计划过滤

有时候你需要跑一个自定义的计划。比如我经常用 cts-x86.xml 来专门测x86架构的设备:

run cts --plan cts-x86

3.3.3 按用例名称过滤

如果你怀疑某个具体方法有问题,可以直接指定:

run cts --class android.hardware.camera2.cts.CameraDeviceTest --method testOpenCamera

3.3.4 按测试规模过滤

这个我前面提过,用 -e size 参数:

run cts -e size small

避坑指南:我曾经犯过一个错——只过滤了类名,没过滤方法名,结果把整个类的所有用例都跑了一遍,白白等了两个小时。所以,过滤条件一定要写精准。

3.4 测试计划与用例的对应关系

为了让你更直观地理解,我整理了一个表格:

测试计划名称 包含模块 典型用例数 适用场景
cts.xml 全部模块 约50万+ 完整兼容性测试
cts-x86.xml x86架构相关 约30万 x86设备专项测试
cts-tv.xml TV相关模块 约20万 Android TV设备测试
cts-automotive.xml 车载相关模块 约15万 车载系统兼容性测试

你看,不同的计划,用例数量和覆盖范围都不一样。选对了计划,能帮你省下大量时间。

3.5 实战中的用例管理技巧

最后,分享几个我平时用得比较多的技巧:

  • 善用排除列表:有些用例已知会失败,可以加到 known-failures.xml 里,避免重复跑浪费时间。
  • 分批次跑:如果设备资源有限,可以把测试计划拆成几批,分批执行。我一般按模块分,一次跑3-4个模块。
  • 结果归档:每次跑完测试,我都会把结果XML文件按日期命名保存。这样出了问题,能快速回溯是哪次改动引入的。

个人经验:我习惯在跑大规模测试前,先跑一遍 --retry 模式,只重跑上次失败的用例。这样能快速验证修复是否有效,不用全量重跑。

好了,关于测试计划和用例管理,今天就聊到这儿。说白了,这块的核心就是“精准打击”——知道测什么、怎么测、怎么过滤。掌握了这些,你就能从海量用例中游刃有余地找到你需要的那一个。