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

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

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

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

目录
相关文章
|
3天前
|
敏捷开发 人工智能 Devops
探索自动化测试的高效策略与实践###
当今软件开发生命周期中,自动化测试已成为提升效率、保障质量的关键工具。本文深入剖析了自动化测试的核心价值,探讨了一系列高效策略,包括选择合适的自动化框架、设计可维护的测试脚本、集成持续集成/持续部署(CI/CD)流程,以及有效管理和维护测试用例库。通过具体案例分析,揭示了这些策略在实际应用中的成效,为软件测试人员提供了宝贵的经验分享和实践指导。 ###
|
2天前
|
机器学习/深度学习 人工智能 jenkins
软件测试中的自动化与持续集成实践
在快速迭代的软件开发过程中,自动化测试和持续集成(CI)是确保代码质量和加速产品上市的关键。本文探讨了自动化测试的重要性、常见的自动化测试工具以及如何将自动化测试整合到持续集成流程中,以提高软件测试的效率和可靠性。通过案例分析,展示了自动化测试和持续集成在实际项目中的应用效果,并提供了实施建议。
|
3天前
|
Java 测试技术 持续交付
探索自动化测试在软件开发中的关键作用与实践
在现代软件开发流程中,自动化测试已成为提升产品质量、加速交付速度的不可或缺的一环。本文深入探讨了自动化测试的重要性,分析了其在不同阶段的应用价值,并结合实际案例阐述了如何有效实施自动化测试策略,以期为读者提供一套可操作的实践指南。
|
28天前
|
Java 测试技术 开发者
初学者入门:掌握单元测试的基础与实践
【10月更文挑战第14天】单元测试是一种软件测试方法,它验证软件中的最小可测试单元——通常是单独的函数或类——是否按预期工作。单元测试的目标是确保每个模块在其自身范围内正确无误地运行。这些测试应该独立于其他模块,并且应该能够反复执行而不受外部环境的影响。
50 2
|
1月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
1月前
|
测试技术 UED
软件测试的艺术与实践
【10月更文挑战第9天】 在数字时代的浪潮中,软件成为了我们生活和工作不可或缺的一部分。然而,高质量的软件背后,是无数测试工程师的默默付出。本文将通过深入浅出的方式,探讨如何进行高效的软件测试,确保软件产品的质量与稳定性。我们将一起揭开软件测试的神秘面纱,从基础理论到实际操作,一步步走进这个充满挑战与创造的世界。
|
3天前
|
Web App开发 敏捷开发 测试技术
探索自动化测试的奥秘:从理论到实践
【10月更文挑战第39天】在软件质量保障的战场上,自动化测试是提升效率和准确性的利器。本文将深入浅出地介绍自动化测试的基本概念、必要性以及如何实施自动化测试。我们将通过一个实际案例,展示如何利用流行的自动化测试工具Selenium进行网页测试,并分享一些实用的技巧和最佳实践。无论你是新手还是有经验的测试工程师,这篇文章都将为你提供宝贵的知识,帮助你在自动化测试的道路上更进一步。
|
3天前
|
敏捷开发 Java 测试技术
探索自动化测试:从理论到实践
【10月更文挑战第39天】在软件开发的海洋中,自动化测试是一艘能够带领团队高效航行的船只。本文将作为你的航海图,指引你理解自动化测试的核心概念,并分享一段实际的代码旅程,让你领略自动化测试的魅力和力量。准备好了吗?让我们启航!
|
8天前
|
测试技术 API Android开发
探索软件测试中的自动化框架选择与实践####
本文深入探讨了软件测试领域内,面对众多自动化测试框架时,如何依据项目特性和团队需求做出明智选择,并分享了实践中的有效策略与技巧。不同于传统摘要的概述方式,本文将直接以一段实践指南的形式,简述在选择自动化测试框架时应考虑的核心要素及推荐路径,旨在为读者提供即时可用的参考。 ####
|
19天前
|
机器学习/深度学习 人工智能 自然语言处理
探索软件测试的边界:从基础到高级的实践之旅
【10月更文挑战第21天】 在当今数字化时代,软件已成为我们生活和工作中不可或缺的一部分。随着技术的快速发展,对软件质量的要求也日益提高。本文旨在通过深入浅出的方式,带领读者踏上一场从基础到高级的软件测试实践之旅。我们将探讨软件测试的基本概念、重要性以及如何有效地进行测试规划和执行。通过具体案例分析,揭示常见错误及其解决方案,同时展望未来软件测试领域的发展趋势。无论你是软件开发新手还是经验丰富的测试工程师,这篇文章都将为你提供宝贵的见解和启发。
35 8