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 模式,只重跑上次失败的用例。这样能快速验证修复是否有效,不用全量重跑。
好了,关于测试计划和用例管理,今天就聊到这儿。说白了,这块的核心就是“精准打击”——知道测什么、怎么测、怎么过滤。掌握了这些,你就能从海量用例中游刃有余地找到你需要的那一个。