浅谈测试环境治理在devops中的应用(代码片段)

上帝De助手 上帝De助手     2023-03-12     703

关键词:

文章目录


原文首发

浅谈测试环境治理在Devops中的应用

近年来Devops可以说是比较火的概念,几乎一夜之间全部大公司都在谈Devops,谈CI/CD流水线,谈效能提升;如果哪个公司没有实施Devops实践,那么肯定会在心里被鄙视到!

其实Devops之所以能火起来,还是因为现在的互联网公司迫于竞争的压力,想要能够先于竞争对手、市场发布自己的产品或需求。而剩下的一部分公司则可能是跟随主流,且不想在前沿的技术实践上太过落后,才实践的Devops。

不管Devops是因为什么原因火起来,终归它还是一个好的实践,可以给团队和公司带来研发流程和效率上的提升。而今天我们就来说说测试环境治理在Devops中的几种应用方式。

测试环境治理

测试环境治理是软件测试过程中对被测对象软件环境的管理和调度的总称。简而言之,就是在测试过程中提供简单、方便、高效的软件测试环境的手段。

为什么测试环境治理跟Devops能扯上关系呢?因为Devops的环节中其中必不可少的就是自动化测试,而自动化测试自然就要涉及到自动化测试环境的搭建和维护,因此就需要有一个针对性的解决方案 – 测试环境治理。

其实对测试环境的管理和维护,是要更早于Devops实践;但是对测试环境的关注和投入,却是因为Devops才被放大的。所以才有了多种形式的测试环境治理方案。

基于物理机/VM的环境编排

在这种情况下并没有真正的使用到虚拟化技术,因为这里的物理机和VM都是提前搭建好的固定操作系统,不是那种可以动态创建和还原的虚拟机镜像。因此可以直接认为是在固定的物理环境中搭建和管理测试环境。

对于这种实际情况,最简单的实现方式就是通过Jenkins来配置每一个模块,直到把所有的模块都配置完成,这样一套完整的测试环境就可以在Jenkins中被管理起来,任意一个模块有更新时,直接触发该模块对应Jenkins部署任务就可以了。

优点:可以基于开源的框架直接上手,管理方式简单清晰

缺点:同时管理全套的所有模块则不够灵活,每一个分支都需要单独写一套搭建的流程

除了上面的jenkins的方式,还有一种就是开发环境搭建的编排工具。同样的它会负责每一个模块的具体搭建工作,另外它还可以统一管理一套环境中的所有模块。并且提供各模块间的依赖搭建编排功能,甚至可以提供模块状态的监控功能。

优点:统一管理一套环境,提供编排、监控、并发能力

缺点:需要一定的开发工作量

基于openstack/KVM的虚拟化编排

选用第一种方式来管理测试环境,通常是因为迫于现状才选择的。如果公司的运维能力相对比较好点,那么你们可能已经使用上了openstack等云平台基础架构,并能够提供动态创建虚拟机的服务。

对于这种实际情况,对于测试环境的治理就相对的容易点了,因为你可以把所有模块的基础环境都做成镜像,每次部署模块时可以通过基础镜像来新建或者恢复一个虚拟机,然后再部署好最新的模块即可。

优点:能够提供非常干净的基础搭建环境

缺点:需要一定的运维基础能力支持(公司需要有搭建私有云的技术能力)

基于docker的容器化编排

如果公司的运维能力再进一步,你们可能已经使用上容器化技术了。那么恭喜你!在测试环境治理的路上,你又可以更进一步了!通过docker的容器化技术,不仅可以实现基础环境的还原,而且是快速的。

对于这种情况,如果配合K8S使用,那么还可以同时拥有全套环境统一管理,编排和监控能力。配置完成一套环境后,可以快速搭建一套一模一样的基础环境。

优点:能够快速搭建全套环境,同时提供编排、监控能力

缺点:需要运维的支持、需要k8s、docker的实践经验

基于服务虚拟化的环境治理

上面提到的3种测试环境治理方案,虽然都能够管理一套环境的搭建,甚至可以快速的复制另一套测试环境。但还是不能覆盖实际工作中的主要场景需求。

比如:开发者A因为开发模块A需要联调,他可能需要一套环境来自测;同样的开发者B、C都会有同样的需求,甚至测试A,产品D都需要一套特定的测试环境来进行测试或者验收。

值得注意的是,上述场景并不是假设的,而是真实存在的;尤其是对于功能模块比较庞大的被测对象。比如:现在比较流程的微服务架构,动辄成百上千的服务模块;想搭建一套完整的服务实属不易,况且还要有空余的机器支持!

所以说上面的3种解决方案,最多只能解决单套测试环境的问题,而不能解决多套测试环境并行的问题。对于这种情况就需要使用服务虚拟化技术来解决了。

所谓的服务虚拟化,是相对于容器技术的进程虚拟化而言。即指的是对服务进行隔离和互通的一种技术实现方式。

服务虚拟化的概念是阿里提出的,但是类似的技术方案在其它公司也有实现,且具体技术方案也不一样,但是其基础的思想都是一致的。下面就来介绍下服务虚拟化的测试环境治理方案。

服务虚拟化的前提是,保证已经拥有了一套基础版本的全套模块服务,这里暂且称之为base环境。base环境通常是与线上版本保持一致的线下全套服务环境。

有了base环境之后,理想状态下如果其中一个模块被修改了,直接用该模块的测试版本替换掉原来的base版本,就可以拥有一套完整的测试环境了。但这里仍然会有几个问题:

  1. 替换测试模块的方式会破坏原来的base环境
  2. 不能同时支持多个模块并发替换和测试

所以服务虚拟化的概念就有了,如何才能实现不同服务间的隔离和共享,来达到环境服务的虚拟化。下面来看一张服务虚拟化的图示。

上图中假设一套环境只有ABC3个模块组成,而上面5个模块却已经拥有了3套环境:一套base环境(ABC),2套虚拟环境(A’BC,ABC’)。依据上面的假设可以推理出,服务虚拟化可以提供任意的一个或多个模块的动态替换,快速的组建起一套基于base环境的虚拟环境。

该方案可以说是环境治理的终极方案,但是它的实现依赖于2个关键技术点:

  • 一是如何实现动态替换base环境中的模块,且不影响其它虚拟环境使用该base模块
  • 二是如何去识别被处理的请求的意图,即请求本身希望被测试模块处理还是被base模块处理

关于这2点的技术实现,阿里、有赞都已经有了各自的实现方式,感兴趣的同学可以去他们的公众号上查阅相关文章;当然还可以有其它的实现方式,大家也可以自己思考下,欢迎来共同探讨该技术话题!

新书推荐

获取更多关于Python和自动化测试的文章,请扫描如下二维码!

搭建devops模式的项目(代码片段)

...框架是不够的,还面临着在对开发项目的快速迭代中进行测试,部署,监控等问题。为了解决这些问题,DevOps的开发模式应运而生。基于个人对DevOps的理解,搭建了一个基于Gin的开源后端项目来实践下DevOps的各个概念:https://gith... 查看详情

04docker/基础设施-devops之路(代码片段)

...的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、baremetal、OpenStack集群和其他的基础应用平台。 查看详情

浅谈devops框架(代码片段)

希望打开这篇能对你有所帮助。这两天如果有关注我的朋友应该会发现,好像缓更了哈。其实不然,让我们透过现象看本质。你们打开我置顶的那一篇,我对以往的博客做了很大的整合与优化,优化完都放那篇《... 查看详情

docker在生产环境中的应用--开篇(代码片段)

...的、可移植的、自给自足的容器,开发者在笔记本上编译测试通过的容器,可以批量地在生产环境中部署,包括VMS(虚拟机)、baremetal、OpenStack集群和其它应用平台。Docker通常应用到以下几种场景:1.web应用的自动化打包和发布... 查看详情

DevOps 和 Azure 应用服务中的环境变量

】DevOps和Azure应用服务中的环境变量【英文标题】:EnvironmentVariablesinDevOpsandAzureAppService【发布时间】:2021-08-2102:25:43【问题描述】:我目前正在努力通过我的DevOps部署管道将环境变量持久化到Azure应用服务。我正在使用Docker容器... 查看详情

devopsgitlab环境部署(代码片段)

...集文化理念、实践与工具与一身,可以提高组织高速交付应用程序和服务的能力,与使用传统软件开发和基 查看详情

devops,hybridopsandaiops浅谈

DevOps,HybridOpsandAIOps浅谈  DevOps的概念出现比较久了,很多的IT项目也都在实际的运用中。AIOps概念作为DevOps的升级版,也得到了很广大的关注,也出现了很多AIOps相关的理论参考模型。但是,在当前的技术发展及应用现状下,Hyb... 查看详情

linux12devops-->08jenkins部署golang(代码片段)

...;第一步:编译环境(Jenkins)1.安装golang语言2.测试第二步:部署环境(web)1.准备源代码到远程仓库2.Jenkins部署3.测试访问3.测试访问Jenkins部署Golang编译环境:1.安装go语 查看详情

devops生命周期,你想知道的全都在这里了!(代码片段)

...么角色?让我们深入了解其含义、用途以及DevOps生命周期中的每个关键阶段。什么是DevOps在DevOps之前,从业人员使用瀑布模型或敏捷开发模型进行软件项目开发:瀑布模型或顺序模型是软 查看详情

devops生命周期,你想知道的全都在这里了!(代码片段)

...么角色?让我们深入了解其含义、用途以及DevOps生命周期中的每个关键阶段。什么是DevOps在DevOps之前,从业人员使用瀑布模型或敏捷开发模型进行软件项目开发:瀑布模型或顺序模型是软 查看详情

devops简单介绍(代码片段)

jenkins作为测试环境代码发布工具,sonar作为静态代码检查工具,idea作为开发工具,jira作为缺陷管理平台,upstream作为codereview工具(正在研究)。DevOps最近比较火热,但是核心貌似都是jenkinsDevOps是一个完整的面向IT运维的工作流... 查看详情

[openairinterface实战-21]:usrprf在开放移动通信中的应用与oai测试环境的搭建(代码片段)

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客本文网址:https://blog.csdn.net/HiWangWenBing/article/details/121110979目录第1章  USRPRF支持的开放移动系统1.1 USRPRF支持的开放移动系... 查看详情

浅谈observer在代码中表现形式(代码片段)

  说到观察者模式,基本在软件工程领域中是应用广泛,不知道的可以先学习一番,下面给个快速的回顾,然后在通过一个grpc中的responseObserver谈下观察者对象在代码中的位置。  喜欢类图,就不上其他图了,只有能看懂类... 查看详情

postman中的全局/环境/集合变量的使用及优先级(代码片段)

...设置成集合或全局变量应用2:一套接口要在不同的环境上测试时,可以新建两个环境,比如test环境和stage环境,两个环境中添加base_url变量并设置不同的值,请求中接口的url中使用base_url,这样只需在Postman中切换环境就可以测试不同的环... 查看详情

linux12devops-->07jenkins部署python(代码片段)

...镜像4)编写配置清单二、部署环境1.部署python2.访问测试Jenkins部署Python编译环境(python)部署环境一、部署环境1、设计user--- 查看详情

devops开发运维与持续集成相关知识(代码片段)

...运维介入,每一次代码的提交都可以实时地发布到对应的测试环境,提前验证代码的正确性。这之中持续集成最经典 查看详情

如何实现devops?

...和软件操作,与业务目标紧密结合,在软件构建、集成、测试、发布到部署和基础设施管理中大力提倡自动化和监控。DevOps的目标是缩短开发周期,增加部署频率,更可靠的发布。用户可通过完整的工具链,深度集成代码仓库、... 查看详情

浅谈左偏树在oi中的应用(代码片段)

Preface可并堆,一个听起来很NB的数据结构,实际上比一般的堆就多了一个合并的操作。考虑一般的堆合并时,当我们合并时只能暴力把一个堆里的元素一个一个插入另一个堆里,这样复杂度将达到(log(|A|)+log(|B|)),极限数据下显... 查看详情