为什么你的自动化测试无法落地

简介: 为什么你的自动化测试无法落地

前段时间面试了某零售电商企业的测试经理岗位,面试官当时提了这样一个问题:我们这边测试团队开展自动化测试工作将近一年了,但目前还未看到明显的对测试过程或者质量的改善效果。如果是你,你会如何做自动化测试其实是一个老生常谈的话题了,业内各种自动化测试平台/框架,或者最佳实践已经足够多。按理来说大家照猫画虎摸着别人的路走应该都不至于难以落地,但现实是依然有很多团队面临难以落地或者说落地了没到达预期效果。我想结合自己的落地实践经验,试着分析为什么难以落地拿不到好结果,并给出自己的一些思考和建议。


自动化测试要解决什么问题?

在传统的软件研发交付流程中,大致有五个阶段:需求-设计-编码-测试-发布。测试更多的只是这个流程中的一环,主要负责QC(质量检测),即分析需求,评估测试点,设计测试用例,执行case,发现并追踪BUG。由于测试处在软件产品发布前的最后一环,且在前面几个阶段往往有各种原因(比如需求变更、临时需求)导致延期提测,真正用于测试活动执行的时间会被压缩。这就导致了一个问题:测试要用更少的时间为可能更多的工作量来兜底。线上正常发布没什么问题还好,如果出了问题大多第一时间找测试问责。自动化测试,就是将手动执行的部分交给机器或者工具自动执行,通过一定的规则和判断逻辑自动出具结果,提高执行的过程效率,让测试人员单位时间内的执行效率可以有大幅提升。随着软件工程和质量保障的相关理念不断发展,以及各种开源商用工具平台的出现,自动化测试从一开始的提高执行效率向着更多方向扩展,比如造测试数据、线上业务场景巡检,这些其实也对应着测试左移右移。总结一下,自动化测试要解决的问题主要如下:

  • 测试准备阶段:提高测试活动开展前准备工作的执行效率(造数据);
  • 测试执行阶段:提高测试活动执行过程的效率(UI/API/UNIT自动化测试);
  • 测试跟踪阶段:提高软件线上发布后的跟踪和信息反馈效率(线上主流程巡检);

但如果我们换个思维来看待自动化测试,我们会发现自动化测试最大的价值在于:缩短了各个阶段的信息反馈链路。即通过提高效率,可以更快的发现可能存在的风险,风险越早发现修复的成本越低,对质量的影响也越小


为什么自动化测试难以落地?

自动化测试属于高度和业务场景绑定的技术项目,要落地就要解决以下问题:

  • 需求的稳定性:如果需求经常变更,那只会造成自动化测试的大量重复返工。
  • 环境的稳定性:测试用例的执行和结果验证需要一个稳定的环境,而目前很多中小型公司对测试环境的稳定性不那么重视,甚至是选择性忽略。
  • 人员的稳定性:自动化测试用例大多要结合具体的业务场景来设计,且相关的测试数据也需要考虑场景的复杂性,如果测试同学在不同的项目和需求间疲于奔命,那很难保证测试用例以及数据和被测场景的高度匹配。
  • 目标的稳定性:自动化测试属于技术实践,合理明确的目标和阶段里程碑就很重要。但很多测试同学在落地自动化测试时,根本没考虑清楚到底要怎么做,要解决什么问题,通过什么手段解决问题,只想着我要用某个高大上的框架或者工具,别人在做我也要做。
  • 系统的简洁性:这点可以理解为系统架构的设计是否清晰,调用关系明确,请求链路可观测。大部分自动化测试都是调用各种API或者元素执行case,如果系统架构设计混乱,不同服务和模块间的调用关系混乱,那么就需要花费大量的时间去梳理这些才能开展后续的工作。前期大量的时间精力投入会极大的影响后续工作的开展,因为这意味着成本的增加。

总的来说,自动化测试有很显著的对质量保障和提升效率的优点,但要实践落地依然要面临诸多挑战。而发现问题,用合理可行的方法解决问题,并考虑投入产出比,这些才是落地一个技术项目的根本要素


自动化测试如何达到预期效果?

我们在做一件事之前,一般都会对其赋予目标,比如开展自动化测试是为了提供测试过程效率。所谓的预期结果,就是针对做这件事所设定的度量指标,比如自动化测试的预期结果是降低版本回归测试的耗时。有了指标就需要对其进行可量化的考核,才能保证结果是否符合预期,比如原来版本回归耗时2人/日,通过自动化测试希望达到0.5人/日。自动化测试要落地达到预期效果,在我看来主要有这几点需要考量:

  • 明确的目标:落地自动化测试的目的是什么,是为了提高效率还是单纯的想学习一个新工具/框架。
  • 合理的评估指标:评估指标的制定要和目标有直接关联,而不是照抄大厂,大厂的指标也许更好但不一定最合适。
  • 多维度的度量数值:度量指标要从多个维度制定,而不是单一维度;度量指标依然是一个辅助决策工具,而不是决定性的给出结论;
  • 合理可执行的过程方式:要达到好的目标,最关键的还是回到执行过程中。执行过程建议先划分为不同阶段,每个阶段制定合理的小目标和明确的时间节点,然后根据具体的执行情况及时调整。

比较合理的执行过程可以参考下列内容:

将大目标拆成比较小的几个目标,以自动化测试来说:刚开始只覆盖核心业务场景的P0场景,先拿到好的结果,然后再扩大覆盖范围,细化case的粒度,直至最终目标。 小步快跑,做出MVP结果(最小可行性方案),用好的结果说服团队和上级,扩大覆盖范围,不断改进和优化自动化测试的提效效果。 制定自动化测试的落地里程碑,以及预期的交付时间和交付效果。比如第一周demo跑通,第一个月覆盖主流程P0场景,第二个月覆盖P0+P1场景,提升回归测试效率30%。

以我的经验来说,成功的技术项目要落地达到预期效果,要具备这些特质:可落地可执行,有明确的落地时间+执行方式+预期结果

相关文章
|
Java
Pytest----Windows10系统安装配置allure
Pytest----Windows10系统安装配置allure
1557 0
Pytest----Windows10系统安装配置allure
|
2月前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
5052 20
|
JavaScript Java API
如何接入阿里云短信服务 (完整指南)
如何接入阿里云短信服务 (完整指南)
57827 1
|
10月前
|
消息中间件 人工智能 Kafka
【云故事探索】NO.14:乐言科技——云原生加速电商行业赋能,云消息队列助力降本 37%
上海乐言科技股份有限公司专注于AI技术,提供电商、金融等领域的整体解决方案。其核心产品“乐语助人”智能客服机器人日均服务超千万人次,助力六万余家电商客户数智化转型。为解决自建消息队列痛点,乐言科技采用阿里云消息队列RocketMQ版Serverless系列,实现业务稳定、开发成本降低、运维效率提升及资源弹性降本37%。通过云原生架构,乐言科技推动AI与电商深度融合,助力行业创新突破。
|
9月前
|
人工智能 安全 Java
spring boot 权限管理的几种方式
Spring Boot 提供多种权限管理方式,包括基于角色的访问控制(RBAC)、基于属性的访问控制(ABAC)和基于访问控制列表(ACL)。RBAC 通过角色简化权限管理;ABAC 根据用户、资源和环境属性实现细粒度控制;ACL 则为每个资源定义访问控制列表。文中以 Spring Security 为例,详细展示了每种方法的配置与实现步骤,帮助开发者根据项目需求选择合适的权限管理方案。示例涵盖依赖添加、类配置及注解使用等关键环节。
1812 0
|
12月前
|
Web App开发 编解码 弹性计算
实时云渲染技术布道 | 像素流送技术与商业化实时云渲染产品的指标对比
随着虚幻引擎(UE)在高品质应用开发中的广泛应用,大内容与轻终端的矛盾日益突出。实时云渲染技术应运而生,成为解决这一矛盾的关键。本文以LarkXR实时云渲染平台为例,对比UE自带的像素流送插件,探讨云渲染技术的革新。LarkXR提供完整的实时云渲染PaaS服务,涵盖云端算力管理、网络传输优化和异构终端接入全流程,支持2K-8K分辨率、30-120FPS帧率,具备强大的集群并发能力和多引擎兼容性,整体性价比远高于像素流送,为开发者提供了更高效、专业可靠的解决方案。
|
11月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
3166 77
|
负载均衡 算法 应用服务中间件
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
|
缓存 NoSQL Java
【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性
【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性
1013 0
|
数据可视化 IDE Java
Java8的Stream流太难用了?看看JDFrame带来的革新体验
【8月更文挑战第6天】在Java开发者的日常工作中,Java 8引入的Stream API无疑是一个革命性的特性,它极大地简化了集合(Collection)的处理方式,使得数据操作更加声明式、函数式。然而,对于初学者或是从早期Java版本迁移过来的开发者而言,Stream API的复杂性和抽象性可能会成为一道门槛。今天,我们就来探讨如何通过JDFrame这样的工具或框架,以及掌握一些高效学习策略,让Java Stream的使用变得更加得心应手。
594 5