测试环境建设原则和管理实践

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
云防火墙按量付费,500元,3个月有效期
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 测试环境是指为了完成软件测试工作所必需的计算机硬件、软件、网络设备、历史数据等的总称,即够支持完成测试工作所需要的软件和硬件。测试环境是测试活动的基础,正确模拟生产环境,稳定支持测试活动是测试环境的基本要求。稳定可控的测试环境能够提升测试工程师的测试工作效率,测试工程师无需花费过多的时间维护测试环境的稳定、测试数据的合理等工作上。测试工程师只需正确执行测试用例(这里既包含了自动化测试用例也包含手工测试用例)就可以稳定复现测试过程。

1 问题

测试环境是指为了完成软件测试工作所必需的计算机硬件、软件、网络设备、历史数据等的总称,即够支持完成测试工作所需要的软件和硬件。测试环境是测试活动的基础,正确模拟生产环境,稳定支持测试活动是测试环境的基本要求。稳定可控的测试环境能够提升测试工程师的测试工作效率,测试工程师无需花费过多的时间维护测试环境的稳定、测试数据的合理等工作上。测试工程师只需正确执行测试用例(这里既包含了自动化测试用例也包含手工测试用例)就可以稳定复现测试过程。

但是在实际工作中,测试环境却是阻塞测试工作的最为主要问题,测试团队往往会在测试环境是否需要完全复制生产环境而产生争论,同时测试环境的不稳定,测试环境依赖的不确定等问题都给测试环境的搭建造成了困扰。本文给出了一些测试环境的搭建原则以及管理实践,从而最大限度的解决了如上的一些测试环境面临的种种问题。

2 测试环境的建设原则和方法

2.1 测试环境的困局

最理想的测试环境是生产环境完全复制,但是这种理想的测试环境无论是在物理机时期,还是虚拟机时期,乃至现在容器化之下都是很难做到的,难以实现生产环境的完全复制的根本原是成本。在物理机时期,生产环境往往需要部署很多台服务器部,测试环境要想完全按照生产环境建设就需要提供和生产环境一样数量级的硬件成本,这个成本问题几乎是所有团队都难以应付的,因此物理机时期,测试环境的搭建一直是一个难题。
在进入虚拟机时期以后,虽然通过虚拟化可以将一台物理机虚拟成几台服务器使用,但是一台物理机也就可以支持为数不多的几台虚拟机,所以投入的成本问题依旧制约着测试环境的建设规模。那么随着技术的发展,容器化的出现改变了物理机时期、虚拟机时期的一个主要问题,一台物理机可以支持成百上千个容器运行,从而大大提高了物理机的利用率,降低了成本。


image.png容器有着绝对优势,这些优势让测试环境完全复制生产系统成为可能,但是在微服务架构盛行的今天,就算用廉价的容器完全复制生产环境也是需要很高的成本的。因此测试环境应该如何建设也是一个急需解决的问题。

2.2 功能测试环境的搭建原则

功能测试主要是根据产品特性、操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们是否满足设计需求。因此功能测试的测试环境就应该满足如下原则:

  • 1. 基础设施尽最大可能做到相同

这里的基础设施包含了网络拓扑结构、防火墙配置、负载均衡策略等。网络拓扑结构相似,这里的网络拓扑结构指内网环境,不包含互联网的部分。
防火墙配置要做到完全一致,众所周知很多生产故障都是因为防火墙配置问题导致的,但是在实际测试中,很多测试环境中都没有配置防火墙,导致防火墙配置部分的问题没有被测试到,因此在功能测试环境中要求必须和生产环境完全一样的防火墙配置,以确保通过功能测试验证每一个业务请求都是通过防火墙返回了正确的响应。
负载均衡策略要完全一致,这里是因为负载均衡会导致各式各样的“共享”问题,例如权限共享、数据共享等,因此在功能测试的时候如果测试环境的负载均衡策略和生产一致,对应问题也就被覆盖到了。

  • 2. 操作系统要和生产环境完全一致

操作系统是一个系统能够对外提供服务的基础,那么我们更希望在功能测试的时候能够兼顾任何系统和操作系统之间的依赖关系,因此在功能测试环境中的操作系统在版本、补丁、配置等方面要和生产环境完全一致。

  • 3. 支持被测服务的公共服务要完全一致

这里所说的是一些web容器、消息中间件等在配置上、版本上要和生产环境完全一致,这样才能保证所有的公共服务在测试环境都被验证过。

  • 4. 测试数据要在一个完全已知道状态并且要可控制

在测试环境中,测试数据是一个动态过程状态,因此对于功能测试的数据初始化需要有其分钟级的备份机制,可以随时恢复到任意一个已备份的初始状态。同时,在每次功能测试开始之前,测试数据都是处于一个已知并且可控的状态,这样才能保证测试用例执行后的测试结果是稳定的、可信的。

2.3 性能测试环境的搭建原则

性能测试对测试环境的要求更加苛刻,测试工程师不能随意搭建一个测试环境,然后线性评估生产环境的性能结果。性能测试环境在功能测试环境的搭建原则之上,还推荐使用计算单元的方式。那么什么是计算单元呢?假设服务A需要对外提供服务,需要服务入口网页Portal,服务A1、服务A2,那么通过不断地性能测试来划分一个计算单元包含一个服务A、2个服务A1、4个服务A2能够达到最优秀的性能配比,如下图


image.png

上图就是一个计算单元示意图,这个组合刚好在提供100并发的情况下,响应时间、CPU利用率、内存利用率、吞吐量、内网带宽占用量等都满足需求且都是最优数据。那么在系统上线后,出现并发急剧增加的情况下,可以同步建立一个计算单元,从而达到快速的最优比扩容,这样也快速提升了整体技术解决方案的吞吐量。

3 测试环境的管理

测试环境建设原则是测试环境如何创建的问题,测试环境如何维护和管理是测试环境面临的另外一个难题。当测试环境建设完成后,伴随着被测试系统复杂度的升高,制品团队规模的增大,测试环境的需求也会变得复杂,测试环境如何管理就变成了一个必须解决的问题。测试环境的管理也应该针对不同的测试类型而有不同的处理方式,如果永远都以优先级作为唯一的判断标准,测试环境会永远成为研发效能环境的瓶颈点。本文通过设计主干测试环境以及变更分支接入的方法,解决了容器化下的测试环境管理混乱、测试环境紧缺的问题。

主干环境和分支环境可以满足一个微服务多个并行需求的场景,其中主干环境是最接近生产环境的测试环境,对外主要承担了联调测试的支持职责,当变更在生产环境正式发布后,会同步更新主干环境对应的微服务节点。当有对应微服务发生变更的需求需要验证时,在启动新变更的服务后,在服务网关上讲服务的调用方和依赖方的链接入口修改成新变更的微服务就可以开始测试了。在完成测试后,在服务网关上恢复调用链路,等制品发布生产环境成功后,再用新变更服务替换原有服务。


image.png


制品团队的本次变更需要修改B服务和C服务,那么制品团队构建了变更后的服务B1和服务C1,然后通过服务网关将服务入口A的访问入口从服务B调整到服务B1,这样测试数据就会流经分支环境服务B1和服务C1,然后C1 调用服务D返回主干环境,当完成测试后,恢复主干环境的调用关系,发布B和C服务的变更到生产环境,当生产环境发布成功后,测试主干环境和生产环境就出现了服务B和服务C上的不一致,因此替换测试主干环境服务B和服务C为原来的服务B1和服务C1,完成变更全流程,同时可以保持生产环境和主干环境的误差均会在分钟范围内追平。

4 总结

测试环境是测试工作的基础,如果在测试过程中需要不断的维护测试环境的正确性才能保证测试工作的正常秩执行,那么测试工作的效率会严重受到影响。基于上述原则建设测试环境,可以帮助测试工程师聚焦于测试工作本身,从而实现更高效的质量保障工作。

目录
相关文章
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
287 4
|
2月前
|
人工智能 自然语言处理 测试技术
从人工到AI驱动:天猫测试全流程自动化变革实践
天猫技术质量团队探索AI在测试全流程的落地应用,覆盖需求解析、用例生成、数据构造、执行验证等核心环节。通过AI+自然语言驱动,实现测试自动化、可溯化与可管理化,在用例生成、数据构造和执行校验中显著提效,推动测试体系从人工迈向AI全流程自动化,提升效率40%以上,用例覆盖超70%,并构建行业级知识资产沉淀平台。
从人工到AI驱动:天猫测试全流程自动化变革实践
|
2月前
|
数据采集 存储 人工智能
从0到1:天猫AI测试用例生成的实践与突破
本文系统阐述了天猫技术团队在AI赋能测试领域的深度实践与探索,讲述了智能测试用例生成的落地路径。
从0到1:天猫AI测试用例生成的实践与突破
|
3月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
171 6
|
3月前
|
人工智能 边缘计算 搜索推荐
AI产品测试学习路径全解析:从业务场景到代码实践
本文深入解析AI测试的核心技能与学习路径,涵盖业务理解、模型指标计算与性能测试三大阶段,助力掌握分类、推荐系统、计算机视觉等多场景测试方法,提升AI产品质量保障能力。
|
3月前
|
人工智能 自然语言处理 测试技术
AI测试平台的用例管理实践:写得清晰,管得高效,执行更智能
在测试过程中,用例分散、步骤模糊、回归测试效率低等问题常困扰团队。霍格沃兹测试开发学社推出的AI测试平台,打通“用例编写—集中管理—智能执行”全流程,提升测试效率与覆盖率。平台支持标准化用例编写、统一管理操作及智能执行,助力测试团队高效协作,释放更多精力优化测试策略。目前平台已开放内测,欢迎试用体验!
|
4月前
|
人工智能 资源调度 jenkins
精准化回归测试:大厂实践与技术落地解析
在高频迭代时代,全量回归测试成本高、效率低,常导致关键 bug 漏测。精准化测试通过代码变更影响分析,智能筛选高价值用例,显著提升测试效率与缺陷捕获率,实现降本增效。已被阿里、京东、腾讯等大厂成功落地,成为质量保障的新趋势。
|
4月前
|
搜索推荐 Devops 测试技术
避免无效回归!基于MCP协议的精准测试影响分析实践
本文揭示传统测试的"孤岛困境",提出MCP(Model Context Protocol)测试新范式,通过模型抽象业务、上下文感知环境和协议规范协作,实现从机械执行到智能测试的转变。剖析MCP如何颠覆测试流程,展示典型应用场景,并提供团队落地实践路径,助力测试工程师把握质量效率革命的新机遇。
|
4月前
|
人工智能 缓存 自然语言处理
大模型性能测试完全指南:从原理到实践
本文介绍了大模型性能测试的核心价值与方法,涵盖流式响应机制、PD分离架构、五大关键指标(如首Token延迟、吐字率等),并通过实战演示如何使用Locust进行压力测试。同时探讨了多模态测试的挑战与优化方向,帮助测试工程师成长为AI系统性能的“诊断专家”。
|
6月前
|
人工智能 Java 测试技术
SpringBoot 测试实践:单元测试与集成测试
在 Spring Boot 测试中,@MockBean 用于创建完全模拟的 Bean,替代真实对象行为;而 @SpyBean 则用于部分模拟,保留未指定方法的真实实现。两者结合 Mockito 可灵活控制依赖行为,提升测试覆盖率。合理使用 @ContextConfiguration 和避免滥用 @SpringBootTest 可优化测试上下文加载速度,提高测试效率。
356 5