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

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

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天前
|
机器学习/深度学习 敏捷开发 监控
深入探索软件测试中的持续集成与持续部署(CI/CD)实践
【5月更文挑战第10天】 在现代软件开发周期中,"持续集成"(CI)与"持续部署"(CD)是提升效率、确保质量的重要环节。本文将详细探讨CI/CD在软件测试中的应用,包括其基本概念、实施策略、工具应用及面临的挑战。不同于一般性概述,本文将重点分析如何优化测试流程以适应CI/CD环境,并提出针对性的改进措施。通过实际案例分析,揭示成功实施CI/CD的最佳实践,并讨论如何在不断变化的技术环境中保持测试策略的前瞻性和灵活性。
|
4天前
|
算法 测试技术 开发者
测试驱动开发(TDD)实战:从理论到实践
【5月更文挑战第8天】TDD实战指南:先测试后开发,确保代码质量与可维护性。核心思想是编写测试用例→实现代码→验证→重构。优点包括提高代码质量、促进设计思考和增强可测试性。实战步骤包括编写独立、明确的测试用例,遵循最小可用原则编写代码,运行测试并分析失败原因,以及在验证通过后进行代码重构与优化。通过TDD,开发者能提升编程技能和项目成功率。
|
5天前
|
Java 测试技术 Maven
5个编写技巧,有效提高单元测试实践
本文作者详细讲解了关于单元测试的相关知识,做好单元测试能有效地保障代码质量,本文将手把手教你学会应用单元测试并附有案例、测试插件。
|
5天前
|
Java 测试技术 开发者
卓越工程之单元测试在行权鉴权中的实践
这篇文章着重在“实践”上,是对Java编程技巧之单元测试用例编写流程这篇文章的实际应用,并没有高深的理论和技术。
41 10
|
6天前
|
Web App开发 JSON 前端开发
我理解的测试开发与实践总结——新人篇
本文以作者的视角,讲述了测试与开发、产品之间的关系,如何做好一个测试以及做好一个测试应当具有的素质与技能。
|
7天前
|
敏捷开发 测试技术 持续交付
深入理解自动化测试:框架与实践
【5月更文挑战第5天】 在现代软件开发周期中,自动化测试已成为确保产品质量和加速交付过程的关键环节。本文将深入探讨自动化测试的核心概念、框架选择以及实际实施过程中的最佳实践。通过分析各种自动化测试工具和技术的优缺点,我们旨在为读者提供一种系统化的方法来构建和维护有效的自动化测试环境。
|
11天前
|
机器学习/深度学习 人工智能 算法
深入理解与实践:基于AI的软件测试自动化
【5月更文挑战第1天】随着人工智能的不断发展,其在软件测试中的应用也日益广泛。本文将探讨如何利用AI进行软件测试自动化,包括其理论基础、实现方式以及在实际中的应用。我们将通过实例分析,展示AI在提高软件测试效率和质量方面的巨大潜力。
|
12天前
|
中间件 测试技术 API
探索自动化测试工具的新边界:Selenium与Appium的集成实践
【4月更文挑战第30天】 随着移动应用和Web应用的不断融合,传统的自动化测试工具需要适应新的测试环境。本文将详细分析Selenium和Appium这两款流行的自动化测试工具的集成实践,探讨如何构建一个能够同时支持Web和移动端应用的自动化测试框架。通过对比两者的技术架构、功能特性以及在实际项目中的集成过程,我们旨在为读者提供一个清晰的指导,帮助他们在复杂的应用环境中实现高效、稳定的自动化测试流程。
|
12天前
|
机器学习/深度学习 人工智能 数据管理
深入探索自动化测试框架的设计与实践
【4月更文挑战第30天】 随着软件行业的快速发展,传统的手动测试方式在效率和可靠性方面逐渐暴露出不足。本文将重点探讨自动化测试框架的设计理念、关键组成部分以及实际应用中的挑战与解决方案。通过对自动化测试框架的深入研究,我们旨在为读者提供构建高效、可靠的自动化测试系统的指导和启示。文章首先分析了自动化测试的重要性,接着详细介绍了几种流行的自动化测试工具,并以此为基础提出了设计框架的核心原则和架构模式。最后,通过案例研究,展示了如何在实际项目中实施自动化测试框架,并讨论了面临的常见问题及解决策略。
|
12天前
|
机器学习/深度学习 人工智能 机器人
深入理解自动化测试:框架、工具与实践
【4月更文挑战第30天】 在现代软件开发周期中,自动化测试已成为确保产品质量和加速市场交付的关键环节。本文将探讨自动化测试的核心框架、常用工具以及实际应用的最佳实践,旨在为软件测试工程师提供深入的理解和有效的策略,以改进其自动化测试流程。我们将分析几种流行的测试自动化框架,包括Selenium、Appium和JUnit,并讨论如何根据项目需求选择适合的工具。此外,文中还将介绍持续集成(CI)环境下的自动化测试策略,以及如何通过测试结果分析和报告来优化测试过程。目标是帮助读者构建更健壮、更高效的自动化测试系统。

热门文章

最新文章