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

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

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 总结

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

目录
相关文章
|
2月前
|
测试技术
软件测试的艺术:探索式测试的实践与思考
在软件开发的广阔海洋中,测试是确保航船稳健行驶的关键。本文将带你领略探索式测试的魅力,一种结合创造性思维和严格方法论的测试方式。我们将一起揭开探索式测试的神秘面纱,了解其核心概念、实施步骤和带来的效益。通过实际代码示例,你将学会如何将探索式测试融入日常的软件质量保证流程中,提升测试效率与质量。
|
1月前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
47 4
|
1月前
|
人工智能 JavaScript 前端开发
自动化测试框架的演进与实践###
本文深入探讨了自动化测试框架从诞生至今的发展历程,重点分析了当前主流框架的优势与局限性,并结合实际案例,阐述了如何根据项目需求选择合适的自动化测试策略。文章还展望了未来自动化测试领域的技术趋势,为读者提供了宝贵的实践经验和前瞻性思考。 ###
|
1月前
|
测试技术 Python
探索软件测试的深度与广度:从理论到实践
在数字化时代,软件已成为我们生活中不可或缺的一部分。随着技术的不断进步和用户需求的多样化,确保软件质量变得尤为重要。本文将深入浅出地介绍软件测试的核心概念、类型及其在软件开发生命周期中的重要性。我们将通过实际案例,展示如何实施有效的测试策略,并探讨自动化测试的未来趋势,旨在为读者提供一套完整的软件测试知识体系,帮助提升软件质量和开发效率。
|
1月前
|
测试技术 Python
探索软件测试的奥秘:从理论到实践
在软件开发的宇宙中,软件测试犹如一颗璀璨的星辰,指引着质量的方向。本文将带你穿梭于软件测试的理论与实践之间,揭示其内在的逻辑和魅力。从测试的重要性出发,我们将探讨不同类型的测试方法,并通过实际案例分析,深入理解测试用例的设计和应用。最后,我们将通过一个代码示例,展示如何将理论知识转化为实际操作,确保软件质量的同时,也提升你的测试技能。让我们一起踏上这段探索之旅,发现软件测试的无限可能。
|
1月前
|
jenkins 测试技术 持续交付
自动化测试框架的搭建与实践
在软件开发领域,自动化测试是提升开发效率、确保软件质量的关键手段。本文将引导读者理解自动化测试的重要性,并介绍如何搭建一个基本的自动化测试框架。通过具体示例和步骤,我们将探索如何有效实施自动化测试策略,以实现软件开发流程的优化。
70 7
|
1月前
|
测试技术
探索软件测试的奥秘:从理论到实践
本文深入探讨了软件测试的基本概念、重要性、主要类型以及实施策略。通过分析不同测试阶段和相应的测试方法,文章旨在为读者提供一套完整的软件测试知识体系,帮助他们更好地理解和应用测试技术,确保软件产品的质量和可靠性。
66 4
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
智能化软件测试:AI驱动的自动化测试策略与实践####
本文深入探讨了人工智能(AI)在软件测试领域的创新应用,通过分析AI技术如何优化测试流程、提升测试效率及质量,阐述了智能化软件测试的核心价值。文章首先概述了传统软件测试面临的挑战,随后详细介绍了AI驱动的自动化测试工具与框架,包括自然语言处理(NLP)、机器学习(ML)算法在缺陷预测、测试用例生成及自动化回归测试中的应用实例。最后,文章展望了智能化软件测试的未来发展趋势,强调了持续学习与适应能力对于保持测试策略有效性的重要性。 ####
|
2月前
|
敏捷开发 Devops 测试技术
探索自动化测试之美:从理论到实践
在软件开发的海洋中,自动化测试犹如一座灯塔,指引着项目向着质量和效率的彼岸。本文将扬帆起航,从自动化测试的意义出发,穿越工具选择的海域,停靠在实战演练的岛屿,最终抵达持续集成的港湾。我们将通过一个具体的代码示例,体验自动化测试的魅力,并分享如何将这些实践应用到日常的软件质量保证过程中。
|
2月前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
53 2