大模型“四虎”出山,亮相 4 月 QCon 北京。 了解详情
写点什么

从零到一:SaaS 平台自动化测试体系实践

  • 2025-02-11
    北京
  • 本文字数:4901 字

    阅读完需:约 16 分钟

大小:2.37M时长:13:49
从零到一:SaaS平台自动化测试体系实践

本文深入剖析了团队如何基于创新性的 “双螺旋模式”、自研测试工具和 “先保障质量,再提升效率” 的核心理念,在 SaaS 业务快速发展背景下,构建高效、可扩展的自动化测试体系,从而更好地服务于业务需求,实现降本提质的目标。我们面临的挑战是如何解决测试资源分配不均、测试效率低下、自动化测试推进缓慢等问题。为应对这些挑战,团队创新性地提出了 “双螺旋模式”,并自主研发了覆盖接口、性能和 UI 的全方位自动化测试工具链,结合 CI/CD 实现了测试的持续集成。本文将重点介绍团队如何基于 “双螺旋模式” 构建高效的自动化测试体系,以及如何通过技术手段提升测试效率和覆盖率,最终取得了在回归提速、覆盖率提升和拦截 Bug 等方面的显著成果。本文将为业界提供可参考的 SaaS 自动化测试体系建设经验。

 

过去的问题现在的思考

背景与挑战

在 2018 年,随着 SaaS 业务的快速增长,测试团队面临着巨大的压力,自动化测试推进缓慢,主要表现在以下几个方面:

  • 测试人员能力不足: 测试团队成员普遍缺乏自动化测试的编码能力,难以应对复杂的 SaaS 业务逻辑。同时,部分测试人员对自动化测试的价值和意义认识不足,导致自动化测试推进缓慢。例如,直播业务模块的回归测试,由于需要手工执行,每次都需要耗费大量的测试人力和时间。

  • 测试资源分配不均: 各产品线各自为战,都希望优先推进自动化测试,导致测试资源竞争激烈,资源在 A 项目和 B 项目之间频繁切换,每个项目测试效率降低了 20%。

  • 自动化工具缺失: 缺乏统一的自动化测试平台和工具,导致测试用例无法有效复用,测试效率较低,并且维护成本高昂,例如,维护一次回归测试用例需要花费 50 小时,测试效率低下导致版本发布周期延长,严重影响了业务发展,无法快速响应市场需求,影响了客户的体验。

 

核心理念:交付效率与质量的平衡



图一:团队的交付效率与质量平衡策略

 

面对交付效率和交付质量的矛盾,团队得出结论:

先保障质量可控,再提高过程效率,通过节省下来的资源去投入到提高质量的过程中

这一理念指导了自动化测试体系的建设,确保在追求效率的同时,不以牺牲产品质量为代价,从而保障业务的稳定性和客户的满意度。

 

自动化测试落地实践

为了实现上述目标,团队从协同模式、人员能力、技术手段等多方面进行了改进。

双螺旋模式:业务测试与测试开发的协同



图二:团队双螺旋模式

 

为了更好地保障交付质量和效率,团队引入了“双螺旋模式”。该模式的核心是将业务测试和测试开发有机结合,构建双螺旋上升的质量保障体系:

  • 测试开发负责旧功能回归: 测试开发团队不再专注于新功能测试,而是深入理解业务,利用技术手段对旧功能进行自动化回归测试,从而提高回归效率。

  • 业务测试负责新功能测试: 业务测试团队则专注于新功能的首轮测试,确保新功能能够快速且有质量保障地交付。

  • 新旧功能的交替: 当新功能经过首轮测试并趋于稳定后,其测试用例将沉淀为旧功能,并由测试开发团队将其转换为自动化用例。测试开发团队对旧功能的回归交付质量负责。

 

这种模式下,测试开发团队专注于构建质量保障的底座,而业务测试团队则可以更加专注于新功能测试,两者形成协同,共同提高交付效率和质量,确保测试工作真正服务于业务目标。

 

业务测试从经验型转变到技术型

仅仅依靠测试开发团队对旧功能进行自动化测试是不够的。业务测试团队仍然承担着每周大量的交付工作,为了提高新功能的交付和回归效率,节省时间投入到更深层次的测试用例设计中,业务测试转型势在必行。

 

为了更好地适应快速迭代的业务需求,业务测试团队必须从经验型向技术型转变,掌握自动化测试能力,以应对繁重的测试任务。

 

通过内部培训、技术分享、项目实践 等方式,帮助业务测试人员掌握基础的自动化测试技能。 例如,业务人员可以独立完成简单的自动化测试用例编写,并运用自动化工具提升测试效率。业务测试人员通过掌握自动化测试技能,可以更好地理解业务需求,从而设计出更具针对性和业务价值的测试用例,提升测试的有效性,并可以把精力放在探索更深入的业务场景中。

随着技术的不断创新和交付模式的不断改变,测试团队需要尽快从交付型经验质量向实时技术型质量方向转移。

 

传统的交付型质量,将测试作为一道道关卡,以任务的形式分布在开发提测和项目发布时,这种方式存在不同角色之间的过多交互,只能起到单点质量保障。实时质量的目标是:将质量手段以模块、组件乃至系统化的方式嵌入到业务应用中,形成实时保障质量的能力。例如,引入自动化技术,首先构建夯实的自动化测试底座,通过 CI/CD 形成核心保护层,然后拓展到多个产品应用场景,落地质量保障。

 

自动化测试达成标准

在自动化测试投产之前,团队制定了一系列的标准,确保自动化测试的有效性和可靠性,具体标准如下:

维度

说明

可观测

通过 Grafana + Prometheus 构建监控大盘,实现 UI 和 API 测试的实时可视化,测试人员可以通过大盘,实时了解测试的进度和结果。我们还会在办公区搭建测试展示机架,实时展示测试进展。从而快速定位问题,减少问题的排查时间。

即时反馈

通过机器人将测试运行报错和运行结果,即时通知到相关人员,提高问题响应效率。测试运行失败时,会通知到对应负责人,方便及时定位和修复问题,从而降低问题的风险。

易上手

使用 低代码测试平台,通过录制和在线设计功能,在测试过程中快速完成自动化测试用例的基础设计,降低自动化测试门槛,测试人员通过简单的拖拽操作,就可以完成测试用例的编辑。从而降低人力成本。

稳定

自动化测试用例需要支持上千次的稳定执行,从而保证测试的可靠性。为了保障用例的稳定性,会对用例进行定期维护和优化,并采用数据驱动的方式管理测试数据,从而避免频繁维护,降低维护成本。

安全

测试用例在本地执行,测试数据在本地存储,并进行定期备份,测试数据在云端进行加密,从而保证测试数据安全。测试结果数据会加密存储,防止数据泄露。我们会定期进行安全扫描,确保测试平台没有漏洞。从而降低由于数据泄露带来的风险。

识别力度可调

自动化测试框架提供灵活的元素识别策略和容错机制,从而提高自动化测试的成功率,比如可以通过元素ID、xpath、css 等多种方式进行元素定位,并可以通过超时时间设置来提高用例的鲁棒性。

调度稳定性可扩展设备

支持分布式执行,根据实际需求动态扩展测试设备,从而提高测试执行效率, 通过分布式调度,可以并行执行大量的测试用例。 我们还使用了 Docker 和 Kubernetes 进行环境的管理和部署,从而方便测试人员快速搭建测试环境。

自带容错

自动化测试框架提供内置的容错机制,能够在测试执行过程中自动处理一些异常情况, 比如,如果某些测试用例执行失败,可以重试执行,并自动记录错误日志。

表一:自动化测试标准

 

自动化测试投产实战

BaaS 服务:业务自动化测试服务

为了长远发展,质量团队提出了分层 BaaS(Business-automationtest-as-services)业务自动化测试服务的目标。该服务的核心是将测试资源和能力进行平台化、服务化输出,能够有效降低测试成本、提高测试效率。该服务的核心是打通业务中心的测试用例库建设,关联分层用例,通过分析研发代码变更影响面,精准推荐测试用例进行持续构建。

  • 分层用例: 将测试用例按功能模块和业务重要性进行分层,例如核心业务流程、关键功能点、边缘功能等。

  • 代码变更影响分析: 通过分析代码变更,找出受影响的功能模块,从而精准地执行相关的测试用例。

  • 持续构建: 通过 CI/CD 流程,将自动化测试集成到日常开发流程中,实现持续测试。




图三: BaaS 服务架构

 

工具和平台建设

业界提出的 TestPyramid 测试金字塔

在自动化测试领域,业界普遍采用测试金字塔模型来指导测试策略的制定。测试金字塔模型从下往上分为 Unit 测试、Service 测试和 UI 测试三个层次,层次越低,测试的执行速度越快,成本越低。团队在自动化测试体系建设中,参考了测试金字塔模型,并结合自身业务特点,构建了覆盖 UI、接口和性能的全方位自动化测试能力。Unit 测试主要用于测试代码的最小单元,例如函数或者类,它具有执行速度快、成本低的特点,通常由开发人员来完成。Service 测试主要用于测试服务与服务之间的交互,包括 API 测试、集成测试等,它能够保证不同服务之间的协同工作,通常由测试人员来完成。UI 测试主要用于测试用户界面,包括功能测试、兼容性测试等,它可以保证用户体验,通常由测试人员来完成。

  


图四:测试金字塔模型

 

行业现状

目前,业界在自动化测试方面仍面临诸多挑战,例如测试成本高、维护困难、自动化覆盖率低等问题。同时,在多终端多角色场景下,业界常见的自动化测试方法也存在诸多不足,例如,测试工具难以覆盖复杂的交互场景,测试数据难以管理,测试用例维护成本高等。如上图所示,API 自动化测试和 UI 自动化测试是效率提升最高的两种方式,基于这些行业现状分析,投入资源研发了接口录制回放平台、UI 自动化平台、和 Agent 自动化底座,以应对这些挑战。



图五:工作中使用的效率提升方式

 

接口录制回放平台

该平台能够帮助测试人员快速生成接口自动化测试用例,无需编写大量代码,极大地提升了测试效率。平台支持 RESTful API 和 WebSocket 协议 的录制和回放,并支持数据驱动和参数化的管理, 从而降低了测试人员的技能要求,降低了人力成本。

HTTP API 录制回放

通过浏览器 UI 操作录制 API 数据,降低自动化用例编写难度,并支持对动态参数的处理和复杂鉴权的设置。




图六:接口录制回放平台-HTTP API 录制回放

 

长连接 Socket 录制回放

自研服务端录制工具,拦截通讯事件,快速生成回放数据。

  • 优势: 降低用例使用和维护成本,隔离 UI 变化的影响,纯 API 回放速度快。

  • 录制命令示例: java -cp ./analysis-client-1.0.jar com.kang.ChromeRecorder group={录制组命名};role={录制的角色命名};init={录制的初始化页面}

 



图七:接口录制回放平台-长链接 Socket 录制回放

性能压测平台

该平台基于 JMeter 构建,可以模拟高并发场景,对系统进行负载测试、压力测试和容量测试,并实时监控性能指标。该平台帮助测试人员提前发现系统性能瓶颈,从而避免了线上事故,降低了损失。

  • 监控链路指标: 平台提供全面的性能指标监控,包括 CPU 利用率、内存占用率、响应时间、吞吐量等。

  • 性能测试监控大盘: 提供可视化的大盘,方便用户实时查看性能测试结果。


图八:性能压测平台-性能压测平台架构

 


图九:性能压测平台-性能监控链路指标

监控链路指标说明



性能测试监控大盘

提供可视化的大盘,方便用户实时查看性能测试结果,支持对性能瓶颈的快速定位和分析。




Agent 自动化底座服务

Agent 底座概述

基于多终端、多角色互动等复杂业务场景,构建基于代理模式的分布式自动化技术架构。每个 Agent 部署成微服务,模拟多用户、多终端使用场景,支持多种客户端。Agent 底座基于 Docker 和 Kubernetes 构建,实现 Agent 的动态注册和发现,并通过消息队列实现 Agent 之间的通信,同时实现了测试任务的分布式调度和执行。 该平台支持多终端多角色场景的测试,从而覆盖更复杂的业务场景,提升了测试的覆盖率。



图十一:Agent 自动化底座架构

 

UI 自动化测试平台

该平台提供了图形化界面,方便用户编写和管理 UI 自动化测试用例。

  • 特点: 降低 UI 自动化门槛,通过录制或者图形化编辑用例,支持多种元素定位方式(如 ID、XPATH、CSS)和多浏览器多环境的测试。






图十二:UI 自动化测试平台

 

可观测:测试能力成长

团队通过代码变更覆盖率来衡量自动化测试的有效性,并不断调整测试用例设计。通过分析代码变更,找出未被测试用例覆盖的部分,及时补充用例,从而达到测试覆盖率的提升。通过以下方式来实现可观测性:

  • 代码变更覆盖度分析: 通过分析代码变更,找出未被测试用例覆盖的部分,及时补充用例。

  • 测试用例与代码关联: 将测试用例与代码模块关联起来,方便查找和管理。

  • 自动化测试平台数据可视化: 提供可视化报表和图表,方便用户了解测试覆盖率、测试结果等。

代码变更覆盖度调整用例设计






图十三:可观测-代码变更覆盖度调整用例设计

 

自动化测试收获

  • 回归提速: 自动化测试大大缩短了回归测试的时间,每次版本发布平均回归时长节省 50 小时,大大加速了版本发布周期,提高了业务的响应速度 。

  • 回归覆盖率提升: 自动化测试覆盖了更多的功能点,覆盖率从 10% 提升到 70%, 降低了线上缺陷的风险,提升了用户满意度。

  • 自动化拦截 Bug: 自动化测试有效地预防了线上 Bug 的发生,提前拦截了 3 个严重 Bug,避免了线上事故,保障了业务的稳定运行,避免了业务损失。

回归提速效率数据



图十四:回归提速数据

回归覆盖度提升数据



图十五:回归覆盖率数据

自动化测试预防拦截 bug



图十六:某次回归自动化拦截 Bug 数据

 

写在最后

我们的自动化测试实践,并非一蹴而就,而是在不断探索和实践中逐步完善的。通过“双螺旋模式”和各种自动化工具的引入,我们构建了高效的自动化测试体系,持续稳定跑了超过 20 个月,为产品的质量提供了有力的保障,不仅保障了当前业务的质量,更为未来业务发展奠定了坚实的基础。

 

未来,将积极探索 AI 驱动的智能测试,实现测试流程的智能化和自动化,并构建更加完善的质量体系,以适应不断变化的业务需求,具体目标包括:

 

  • 更智能化的测试: 引入 AI 技术,实现智能化的测试用例生成和执行,提高测试效率和覆盖率。例如,利用 AI 自动生成测试用例,并基于 AI 进行缺陷检测和分析,从而更好地服务于业务,并可以降低测试成本。

 

  • 更全面的覆盖: 进一步拓展自动化测试的范围,覆盖更多的业务场景和边缘功能,减少漏测风险,比如覆盖更多的移动端业务和复杂的网络环境。

 

  • 更完善的质量监控体系: 构建更完善的质量监控体系,实现质量的实时可视化,及时发现和解决问题,并能根据数据分析,自动优化测试策略。


作者介绍:

乐少是一位资深技术和管理专家,专注于软件研发、测试和项目管理。曾在网易等知名互联网公司担任重要技术岗位,主导研发效能提升和自动化测试质量平台的建设。曾在保利威推动 SaaS 行业企业直播质量测试平台的建设,助力企业降本增效。他注重实践与创新,以结果为导向,通过优化流程和引入新技术推动团队高效发展。乐少在 InfoQ 等平台分享的经验,特别是在研发效能、质量管理和项目管理领域的实践成果,对行业产生了积极影响。

2025-02-11 17:009599

评论

发布
暂无评论

腾讯面试Java高频210题解析:Spirng+设计模式+Redis+MySQL

Java 程序员 后端

菜鸟弱弱地问:找个薪资待遇差的工作能成长吗?

Java 程序员 后端

终于等到了!阿里内部“性能怪兽”开源了,竟是Nginx

Java 程序员 后端

腾讯某Java程序员为了肝出《300页图解网络知识》+《计算机底层操作系统

Java 程序员 后端

腾讯程序员熬夜码字:网络 IO 演变发展过程和模型介绍,仅此一篇

Java 程序员 后端

菜鸟程序员的超神之路——从校园到职场

Java 程序员 后端

绝了!字节大牛最新上线1940页LeetCode刷题秘籍,堪称完美

Java 程序员 后端

架构实战营模块4课后作业

胡颖

架构实战营

腾讯,阿里,小米等Java开发岗面试真题,kafka+Redis

Java 程序员 后端

腾讯社招(Java岗)四面已拿offer,问的很全面,几大块全涉及

Java 程序员 后端

自己把985道Java面试题整理细分26部分,五面成功面上滴滴

Java 程序员 后端

经典算法(21)毕业生求职必会算法 八皇后问题

Java 程序员 后端

给Swagger换了个新皮肤,瞬间高大上了

Java 程序员 后端

腾讯T3大牛-带你深入解析静态分派-&-动态分派原理

Java 程序员 后端

肝到吐血!字节跳动技术专家耗时两年整理出1014页SSM开发实战,你还没看过吧!

Java 程序员 后端

美团二面问源码卒!闭门偷学318页Spring深度手册,再战

Java 程序员 后端

老夫带你深度剖析Redisson实现分布式锁的原理

Java 程序员 后端

聊一聊Java中那些常见的并发控制手段(1)

Java 程序员 后端

终于,字节跳动要取消大小周了,我 1

Java 程序员 后端

统一处理controller层接口返回的数据

Java 程序员 后端

网关性能大PK,Spring Cloud Gateway让人大失所望!

Java 程序员 后端

网络编程三-原生JDK的BIO以及应用

Java 程序员 后端

聊一哈,新入如何优雅的跟老板打招呼

Java 程序员 后端

膜拜!阿里内部都在强力进阶学习springboot实战派文档

Java 程序员 后端

耗时4个月,阿里架构师打造java面试突击文档,10位朋友已拿offer

Java 程序员 后端

聊一聊Java中那些常见的并发控制手段

Java 程序员 后端

腾讯Java岗面试,竟被“锁”给搞晕了?这样复习

Java 程序员 后端

腾讯内部Netty文档笔记,内容涵盖Netty基础+入门+中级+高级

Java 程序员 后端

绝了!华为技术专家居然把JVM内存模型讲解这么细致!

Java 程序员 后端

编码习惯-函数编写建议

Java 程序员 后端

网络编程四-原生JDK的NIO及其应用

Java 程序员 后端

从零到一:SaaS平台自动化测试体系实践_可观测_乐少_InfoQ精选文章