编者按:本文源自阿里云云效团队出品的《阿里巴巴DevOps实践指南》,扫描上方二维码或前往:https://developer.aliyun.com/topic/devops,下载完整版电子书,了解阿里十年DevOps实践经验。
在任何业务发展的过程中都会不可避免的面临服务的膨胀,应用复杂度的增加,可持续测试的难度不断增加。一方面,用例集会不断的膨胀,一次 CI 验证要数十分钟,用例的维护成本越来越高,开发效率开始降低。另一方面,我们花了精力写了很多自动化用例,希望能够提高投入产出比,也就是测试的有效性。
提升测试速度
分布式测试
分布式测试的核心思想是通过增加计算资源,并发的对 case 进行执行,并在执行后对测试产生的结构化结果进行解析合并,进而提升单次测试的执行速度。
整个测试的执行过程可以划分为以下三个阶段:
- 测试用例解析与分发
- 分组用例的执行
- 分组测试结果合并
以阿里云某云产品核心团队的某工程为例,该工程拥有 1 万多个单元测试用例,在没有采用分布式测试方案之前,一次 CI 的验证时长超过 4 小时,导致问题发现、修复时长拉长,影响了日常的迭代速度。该团队后采取了分布式测试的方式进行,平均的执行时长被优化到了半小时以内。
分布式测试的本质就是用执行资源的堆叠,去换取更快的执行速度。理论上我们把每一个测试用例拆分到一个容器内执行,可以获得极致的反馈速度。但是并不是所有场景下都适合采用分布式测试,例如用例之间存在依赖,这些用例不能无差别的分布在不同的执行分组。
精准测试
分布式测试很大程度上解决了测试执行的速度问题。但是如果在任何情况下都无差别的执行全量的用例,会存在一些问题:
-
对计算资源的浪费
-
引入了大量的无效执行
-
用例本身稳定性问题导致排查时间浪费
-
在探索测试有效性的过程中,我们引入了精准测试的方案
什么是精准测试?
通过建立