• 11
  • 11
分享
  • 测试环境稳定性治理——软件测试圈
  • 北极 2022-04-08 13:50:18 字数 4632 阅读 1284 收藏 11

前言

前几天在某个微信群里看到有同学在问测试环境治理的问题,正好我在之前的公司负责过相关的技术项目,在这方面有一定的实践经验,就解答了她的一些疑惑。

今天看书时候突然想到了这件事,发现这几年大家都在讲测试开发、测试效能、精准测试、敏捷测试、全链路压测等等很多高大上的技术实践和理念,

这篇文章我不会去讲一些看起来很厉害的技术,而是和大家聊聊,我之前负责测试环境稳定性治理时候,面临的种种问题和痛点。

项目背景和痛点

先交代下背景吧,这样能更好的理解做测试环境稳定性治理的出发点和治理方案为什么要如此设计。

我会从业务需求和技术现状两个方面来说明当时技术团队面临的痛点。

业务需求

当时公司业务处在高速发展期,除了日常的版本迭代之外,同时可能还并行着好几个独立项目(其实就是需求排不进版本迭代,需求评审时候被PK掉了,又搞了一个独立项目的名义进行需求交付)。

由于线上发布和灰度的时间节点各不相同,且每个独立项目和日常版本迭代涉及到的业务域以及背后的应用各不相同,有重叠又有新建的服务,因此每个项目都需要不同的测试环境来保证需求交付不受影响。

技术现状

聊完了业务需求背景,再来看看整个技术团队和体系当时面临的问题:

1、整体的需求研发测试交付体系是从Dev-Test-Pre-Pro四个阶段;

Dev:即开发环境,一般由开发自己负责日常维护;
Test:测试环境,也是本文的重点讨论对象,一般由测试维护;
Pre:即预发环境或灰度环境,是线上正式发布的最后一个验证环节;
Pro:我们所理解的生产环境&线上环境,所有外部的用户都可以访问;

2、测试环境有十几套,每套环境几乎都有独立的数据源,且表结构和数据各不相同;

3、所有应用都部署在阿里云上面,交易业务应用是ECS的虚拟机,社区业务应用是基于Isito的容器化;

4、有跨境和国际交易业务,是单独一个BU,但业务逻辑和应用调用关系上又强依赖国内的部分交易业务和应用;

5、微服务架构下各服务之间依赖关系复杂,但服务发布都是不同的测试负责,经常出现A测试同学测试过程中报错,结果是B同学在做服务发布。

或测试过程发现异常,排查很久发现原因是做了DDL变更或者测试数据被使用了导致的各种问题;

6、需求越来越多,需要的测试环境越来越多,但搭建一套环境的成本太高,运维不愿意联调,测试不愿意验证,都想要现成可用的东西来完成各自的工单和任务;

面临的痛点

出于上面的业务需求和技术现状,对技术团队来说,最大的痛点有下面几点:

1、环境太多,云资源成本和日常维护成本太高;

2、发布流程太过随意,消息不及时同步导致出现各种异常;

3、需求太多导致大部分时间耗费在环境维护和异常问题排查方面;

4、需求多任务紧要求更多的测试验证和维护环境占用了大量人力和时间资源的矛盾;

5、多套数据源导致最终线上发布时DDL变更频繁,出现缺少字段或字段格式不正确等情况;

6、为了保证各自项目的交付,各个项目的Owner甚至开始出现“先上车后补票”抢占环境的操作;

7、研发和测试都有测试环境的变更权限,服务的发布和数据库的变更不受控制,“走心发布”随意而为;

上述描述的现状和痛点,当时导致了不少的线上故障,最终避无可避的,环境稳定性治理落到了测试的头上(这里不讨论应该运维负责环境稳定还是谁使用谁负责的话题)。

分析过程及治理规划

针对上述的种种问题和痛点,我用了一周的时间做调研分析和评估,最终落地了环境稳定性治理规划和方案。下面是我的分析评估和治理规划,仅供参考。

调研分析过程

通过调研和访谈以及我自己工作过程中发现的种种问题,我抽象总结出了几个共同点:

1、环境多成本高维护成本大;
2、造轮子和重复建设现象严重;
3、流程不规范且无人遵守默认的原则;
4、环境资源竞争日趋激烈,没有较好的协调机制;
5、沟通成本大,信息同步延时高甚至丢包现象严重;
6、环境问题发现定位排查手段原始,部分同学缺乏相关技能;

稳定性治理规划

调研分析出上述几点共性问题后,我输出了如下的稳定性治理规划:

项目名称测试环境稳定性治理
项目目的

1、降低测试环境不稳定因素,提升环境可用SLA;

2、让测试同学有更充裕的时间做自己专业的事情;

3、快速交付稳定可用的测试环支撑业务的快速发展;

项目目标

短期目标:规范变更流程,降低维护成本,打通底层数据,变更权限收口;

长期目标:10分钟拉起一套新环境,半天内交付稳定可用的测试环境并验收通过;

项目时间节点

整体时间节点:2021年1月1日-2021年6月30日

阶段目标Deadline:

规范变更流程:2021年1月31日

降低维护成本:2021年2月28日

打通底层数据:2021年3月31日

变更权限收口:2021年4月30日

测试环境容器化:2021年5月31日

环境资源下线回收:2021年6月30日

落地过程的一些典型案例

测试环境稳定性治理在落地的过程中,做了很多的技术优化以及跨团队的协调沟通,每个阶段都会遇到很多挑战和问题。

当然,解决问题的过程中,个人也学到了很多新的技能,和不同的角色沟通协调过程中也学会了从不同的维度和角色的角度上去思考解决问题。

下面是六个不同阶段中,典型的治理案例和我个人的思考收获。 

1、规范变更流程

这里的变更除了服务发布、参数配置的变更之外,还有测试环境的DDL变更。典型的案例有:

服务发布没有限制:通过发布平台设置服务发布时间窗口,和各研发及测试团队协商沟通确认(降低任意发布带来的服务不可用);
任何人任何时间都可以发布:每个应用或业务域应用合集指定服务owner,服务发布需要在发布平台经过owner二次确认才可以执行发布流程;
信息不同步&沟通成本高:建立专项的服务发布信息同步群,某应用需要发布,自动艾特对应的owner进行通知确认(可设置免打扰,但带来的影响需要owner自己负责);
收获:很

多时候,运维和DBA也是希望能规范发布和变更流程的(这样他们的工单和任务量会减少,能提效)。

但如果业务方不配合,就很难推进。如果涉及到类似的事情,可以找运维和DBA负责人一起协调推动,团结相关的利益团体,反而能提高整体的进度和效果;

2、降低维护成本

环境多维护成本高:收敛环境的数量,将重复造轮子的部分抽象成公用的部分,我当时采用的方案是搭建stable环境,抽取公用的服务和基础设施,

版本迭代和独立项目,只需要部署各自涉及的应用(这样也能避免不同项目遇到公共应用时,便于部署不同分支的代码);

环境资源竞争激烈:版本迭代固定占用某个环境,独立项目根据提测时间和上线发布时间做资源协调。

如果有同一天发布上线的,根据提测时间,各自拉取对应分支到同一个环境,后续的项目代码分支合并到最早提测的分支上进行测试(一方面降低了环境竞争的问题,另一方面测试资源和环境维护范围更集中);

图片 1.png

Stable环境规划图(仅做示意,已脱敏)

3、打通底层数据

前面提到了多套测试环境多套数据源,这样会导致下面几点有趣的现象:

1.多个测试环境的表结构变更,需要提多次DDL工单,DBA同学任务量大;

2.假设测试过程中测试环境切换,变更就要重新进行,很容易遗漏或者变更有误;

3.即使有专门的测试数据预埋工具,但多环境多数据源会导致数据准备更耗时,加大复杂度;

4.不同环境不同数据源,进行自动化回归的时候,测试case和数据可能要进行修改适配,耗时费力;

5.即使多个项目同时进行,但最终发布线上仅是一套环境和数据源,这样会导致频繁变更带来的线上风险概率;

针对这些现象,我是怎么做的呢?

首先,选择一个环境作为基准环境,所有的DDL变更都先变更到基准环境,然后自动变更到其他环境的数据源上;

其次,stable环境落地,环境发散现象会逐渐收敛,搭建维护变更成本降低后,反而有时间资源做专门的优化工作;

然后,变更权限和入口收敛,通过统一的工单系统进行,降低整体的变更混乱现象,所有变更有迹可循有记录可查;

4、变更权限收口

上面第三部分“打通底层数据”实际上已经介绍过变更权限收口了,这里我想分享的是之前做环境治理时候,和DBA负责人的一次聊天过程:

我:XX大佬,我要搞测试环境稳定性治理,希望减少随意的表结构变更和让底层数据保持一致,需要你的帮助;
DBA负责人:那可真是太好了,我一直想干这个事情,但我去推业务那边一直不搭理我,阻力很大。。。
我:那你看我们合作怎么样,我去和业务研发以及测试协调这个事情,你把底层的技术规范搞定?
DBA负责人:没问题,权限收口,表结构变更统一走工单,降低变更频次,规范数据库和SQL规范,我来搞定;
我:那行,你先准备相关的技术方案和规范,我们先挑一个环境试点,业务方我去沟通,好了我们就开始搞;
DBA负责人:可以,有啥需要我帮忙的尽管说,做这个事情对我们DBA也是个好事情。

分享上面这个对话过程,实际上要表达的是:很多时候我们工作中面临的痛点,也是其他人想解决的问题,寻求利益共同体,协作达成一件事,比孤军奋战更轻松,达成的效果也会更好。

5、测试环境容器化

谈到测试环境容器化,又是另一个故事了。

当时基础架构一直想推业务线接入容器,但一直很难推下去,理由也很正当:“业务迭代需求太多,没时间没资源接,而且稳定性也是要考虑的”。

正好我在牵头做测试环境治理,希望能快速拉起环境和服务(ECS虚拟机部署服务太麻烦了,速度还慢),结果聊着聊着,一拍即合。我负责和业务方沟通,基础架构提供技术解决方案。

这里要补充说明下,不是我有多高的职位和权利,才能去和业务方沟通。而是测试环境的痛点已经影响到整个技术团队的需求迭代研发交付了,大家即使不太乐意,但这个问题不解决大家都很痛。 

6、环境资源下线回收

按照整体的治理规划,完成上述步骤后,就可以开始做环境割接,即:

搭建好stable环境,测试环境以容器化搭建,给业务方交付一套可用的测试环境,就下线回收一套ECS的虚拟机环境。

同时相关的权限收口以及变更管理规范,沟通协调机制在不断的落地和推进过程中,也能不断解决环境使用过程中的种种痛点。

当然,环境割接过程中,有几个点需要注意:

割接的时间节点需要和运维DBA以及业务方明确,不可随意下线;
环境割接不可一刀切,建议先关机,观察一周后再下线,避免遗漏的业务方有依赖而导致其他问题;
环境治理和技术改造方案,在开始前一定要做好调研,坚持推进,否则很容易被遇到的困难和组织架构变更导致项目流产;

7、其他优化手段

整个测试环境稳定性治理过程中,除了上述的一些案例和技术方案之外,还有下面的一些技术优化手段,比如:

1.服务不可用订阅通知;
2.服务发布通知功能上线;
3.环境不可用常见问题及解决方案培训分享;
4.成立专门的虚拟小组,每个域指定负责该域的测试owner;
5.整个各个业务线的自动化测试框架和方式,提供统一的技术方案;
6.测试环境接入日志监控告警,从服务层-DB层,监控告警做到自动化和透明化;
7.环境和服务不可用时长纳入故障SLA计量维度,定时复盘和分析,并不断落地改进;

总结回顾

环境治理是个很复杂和碎片化的技术项目,同时也是团队协调以及人的问题。我要向大家分享的内容总结如下: 

核心:定义问题-提出规划-制定方案-争取资源-推动落地;
技巧:寻求利益共同体一起协作,主动向上寻求帮助,切忌单打独斗;
过程:流程规范-权限收口-降低block因素-基础技术设施建设-技术轮子整合-长期坚持演进;

作者:老_张

原文链接:https://www.cnblogs.com/imyalost/p/15779926.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 手动测试做久了,总会想要尝试接触些新技术,UI自动化就是一个非常容易尝试的入门砖。小白也能做,相信自己放手去试吧。一、为什么需要做UI自动化1.想一想,为什么需要做UI自动化可以从解决问题的角度出发,想一下在工作中,哪些工作重复性非常高?最最常见的重复性工作,那就是:功能回归测试啦。现在市面上的大小公司都在推敏捷开发,几乎都是2周/3周发一次版本。即2周/3周跑一次回归测试,而且Android和iOS都需要跑一次,即便分在个人头上的回归内容很少,其实也占据了大家大量时间。当然,并不是说UI自动化只能在回归测试阶段发光发热,在测试的任何阶段都可以尝试跑UI测试脚本,可以根据公司需要调整运行阶段、...
            0 0 2142
            分享
          • API安全概述       Application Programma Interface (API)由一组定义和协议组合而成,可用于构建和企业集成应用软件。随着数字化转型的深入,API产品的价值日益增高,特别是与微服务、DevOps等技术的融合,使得API成为企业战略发展加速的利器,但随之而来的安全问题也不容忽视。常见的API安全漏洞有以下五种:首先是API应该与应用系统一样在设计之初就考虑安全的因素,比如防篡改(签名)、防重放(时间戳)、防止敏感信息泄露(传输加密与数据最小化)等。API规范性带来的一个问题就是API很容易被发现,比如在URL中出现的...
            11 12 2790
            分享
          • 用工具代替/辅助人工完成软件测试活动的过程,不能为了自动化而自动化自动化测试特点可以对程序的新版本自动执行回归测试可以执行一些手工测试困难或不可能进行的测试可以更好地利用资源测试具有一致性和可重复性自动化一定要有框架自动化测试优势节省时间,提高测试覆盖率和测试精度减少手工测试人为产生的错误提供规范化的过程和一致性自动化测试局限性手工测试比自动测试发现的故障要多,自动化只能发现约15%的bug自动化测试不能提高测试的有效性,只能用于提高测试的效率自动化测试不具有想象力,没人聪明自动化测试不能取代手工测试误区:期望自动化测试发现大量新故障安全性错觉自动化测试的维护开销不适合于自动化测试情景测试频度...
            0 0 1229
            分享
          • 1、AOP相关术语Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在 spring 中,这些点指的是方法,因为 spring 只支持方法类型的连接点。(业务层接口中所有的方法)Pointcut(切入点):所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义(被增强的方法)所有的切入点都是连接点。Advice(通知/增强):所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知,通知的类型:前置通知,后置通知,异常通知,最终通知,环绕通知。Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction 可以在运行期为类动...
            0 0 1301
            分享
          • 经典接口面试题与答案整理首先,非常感谢咱们松勤软件测试学员的面试题分享,最近小明老师把问题的答案整理了一下,分享出来给大家,希望能够帮助大家在面试过程中少踩坑,提高面试通过率。本文持续更新,后期有新的问题会同步分享给大家。有需要其他方面的知识资料的,可以私信我。大家如果对以下问题有什么更好的解答思路,也欢迎讨论区留言1、什么是HTTP协议无状态协议?怎么解决HTTP协议无状态协议是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。解决方案:通过cookie和session来...
            1 1 1907
            分享
      • 51testing软件测试圈微信