前段时间面试了某零售电商企业的测试经理岗位,面试官当时提了这样一个问题:我们这边测试团队开展自动化测试工作将近一年了,但目前还未看到明显的对测试过程或者质量的改善效果。如果是你,你会如何做?自动化测试其实是一个老生常谈的话题了,业内各种自动化测试平台/框架,或者最佳实践已经足够多。按理来说大家照猫画虎摸着别人的路走应该都不至于难以落地,但现实是依然有很多团队面临难以落地或者说落地了没到达预期效果。我想结合自己的落地实践经验,试着分析为什么难以落地拿不到好结果,并给出自己的一些思考和建议。
自动化测试要解决什么问题?
在传统的软件研发交付流程中,大致有五个阶段:需求-设计-编码-测试-发布。测试更多的只是这个流程中的一环,主要负责QC(质量检测),即分析需求,评估测试点,设计测试用例,执行case,发现并追踪BUG。由于测试处在软件产品发布前的最后一环,且在前面几个阶段往往有各种原因(比如需求变更、临时需求)导致延期提测,真正用于测试活动执行的时间会被压缩。这就导致了一个问题:测试要用更少的时间为可能更多的工作量来兜底。线上正常发布没什么问题还好,如果出了问题大多第一时间找测试问责。自动化测试,就是将手动执行的部分交给机器或者工具自动执行,通过一定的规则和判断逻辑自动出具结果,提高执行的过程效率,让测试人员单位时间内的执行效率可以有大幅提升。随着软件工程和质量保障的相关理念不断发展,以及各种开源商用工具平台的出现,自动化测试从一开始的提高执行效率向着更多方向扩展,比如造测试数据、线上业务场景巡检,这些其实也对应着测试左移右移。总结一下,自动化测试要解决的问题主要如下:
- 测试准备阶段:提高测试活动开展前准备工作的执行效率(造数据);
- 测试执行阶段:提高测试活动执行过程的效率(UI/API/UNIT自动化测试);
- 测试跟踪阶段:提高软件线上发布后的跟踪和信息反馈效率(线上主流程巡检);
但如果我们换个思维来看待自动化测试,我们会发现自动化测试最大的价值在于:缩短了各个阶段的信息反馈链路。即通过提高效率,可以更快的发现可能存在的风险,风险越早发现修复的成本越低,对质量的影响也越小。
为什么自动化测试难以落地?
自动化测试属于高度和业务场景绑定的技术项目,要落地就要解决以下问题:
- 需求的稳定性:如果需求经常变更,那只会造成自动化测试的大量重复返工。
- 环境的稳定性:测试用例的执行和结果验证需要一个稳定的环境,而目前很多中小型公司对测试环境的稳定性不那么重视,甚至是选择性忽略。
- 人员的稳定性:自动化测试用例大多要结合具体的业务场景来设计,且相关的测试数据也需要考虑场景的复杂性,如果测试同学在不同的项目和需求间疲于奔命,那很难保证测试用例以及数据和被测场景的高度匹配。
- 目标的稳定性:自动化测试属于技术实践,合理明确的目标和阶段里程碑就很重要。但很多测试同学在落地自动化测试时,根本没考虑清楚到底要怎么做,要解决什么问题,通过什么手段解决问题,只想着我要用某个高大上的框架或者工具,别人在做我也要做。
- 系统的简洁性:这点可以理解为系统架构的设计是否清晰,调用关系明确,请求链路可观测。大部分自动化测试都是调用各种API或者元素执行case,如果系统架构设计混乱,不同服务和模块间的调用关系混乱,那么就需要花费大量的时间去梳理这些才能开展后续的工作。前期大量的时间精力投入会极大的影响后续工作的开展,因为这意味着成本的增加。
总的来说,自动化测试有很显著的对质量保障和提升效率的优点,但要实践落地依然要面临诸多挑战。而发现问题,用合理可行的方法解决问题,并考虑投入产出比,这些才是落地一个技术项目的根本要素。
自动化测试如何达到预期效果?
我们在做一件事之前,一般都会对其赋予目标,比如开展自动化测试是为了提供测试过程效率。所谓的预期结果,就是针对做这件事所设定的度量指标,比如自动化测试的预期结果是降低版本回归测试的耗时。有了指标就需要对其进行可量化的考核,才能保证结果是否符合预期,比如原来版本回归耗时2人/日,通过自动化测试希望达到0.5人/日。自动化测试要落地达到预期效果,在我看来主要有这几点需要考量:
- 明确的目标:落地自动化测试的目的是什么,是为了提高效率还是单纯的想学习一个新工具/框架。
- 合理的评估指标:评估指标的制定要和目标有直接关联,而不是照抄大厂,大厂的指标也许更好但不一定最合适。
- 多维度的度量数值:度量指标要从多个维度制定,而不是单一维度;度量指标依然是一个辅助决策工具,而不是决定性的给出结论;
- 合理可执行的过程方式:要达到好的目标,最关键的还是回到执行过程中。执行过程建议先划分为不同阶段,每个阶段制定合理的小目标和明确的时间节点,然后根据具体的执行情况及时调整。
比较合理的执行过程可以参考下列内容:
将大目标拆成比较小的几个目标,以自动化测试来说:刚开始只覆盖核心业务场景的P0场景,先拿到好的结果,然后再扩大覆盖范围,细化case的粒度,直至最终目标。 小步快跑,做出MVP结果(最小可行性方案),用好的结果说服团队和上级,扩大覆盖范围,不断改进和优化自动化测试的提效效果。 制定自动化测试的落地里程碑,以及预期的交付时间和交付效果。比如第一周demo跑通,第一个月覆盖主流程P0场景,第二个月覆盖P0+P1场景,提升回归测试效率30%。
以我的经验来说,成功的技术项目要落地达到预期效果,要具备这些特质:可落地可执行,有明确的落地时间+执行方式+预期结果。