前几天在某个微信群里看到有同学在问测试环境治理的问题,正好我在之前的公司负责过相关的技术项目,在这方面有一定的实践经验,就解答了她的一些疑惑。
今天看书时候突然想到了这件事,发现这几年大家都在讲测试开发、测试效能、精准测试、敏捷测试、全链路压测等等很多高大上的技术实践和理念,但很少有人关注到测试环境稳定性的这种存在于我们日常工作中,困扰我们工作进度和心态的细节问题(至少对于测试同学来说)。
我并不是要表达上述的一些技术实践空泛或者什么(我自己本人就一直在写性能测试&全链路压测和稳定性保障相关的技术文章),但业内目前确实存在一些为了证明测试价值和在技术链上不被鄙视而刻意为之的炫技行为。目前能搜到或者说我个人看到的关于测试环境稳定性治理的文章,仅有阿里和滴滴在这方面的一些实践方法论(链接见下方)。
所以呢,这篇文章我不会去讲一些看起来很厉害的技术,而是和大家聊聊,我之前负责测试环境稳定性治理时候,面临的种种问题和痛点,我是如何梳理和分析,并尝试去解决这些问题的过程。附链接:
先交代下背景吧,这样能更好的理解做测试环境稳定性治理的出发点和治理方案为什么要如此设计。我会从业务需求和技术现状两个方面来说明当时技术团队面临的痛点。
当时公司业务处在高速发展期,除了日常的版本迭代之外,同时可能还并行着好几个独立项目(其实就是需求排不进版本迭代,需求评审时候被PK掉了,又搞了一个独立项目的名义进行需求交付)。由于线上发布和灰度的时间节点各不相同,且每个独立项目和日常版本迭代涉及到的业务域以及背后的应用各不相同,有重叠又有新建的服务,因此每个项目都需要不同的测试环境来保证需求交付不受影响。
聊完了业务需求背景,再来看看整个技术团队和体系当时面临的问题:
Dev:即开发环境,一般由开发自己负责日常维护;
Test:测试环境,也是本文的重点讨论对象,一般由测试维护;
Pre:即预发环境或灰度环境,是线上正式发布的最后一个验证环节;
Pro:我们所理解的生产环境&线上环境,所有外部的用户都可以访问;
出于上面的业务需求和技术现状,对技术团队来说,最大的痛点有下面几点:
上述描述的现状和痛点,当时导致了不少的线上故障,最终避无可避的,环境稳定性治理落到了测试的头上(这里不讨论应该运维负责环境稳定还是谁使用谁负责的话题)。
针对上述的种种问题和痛点,我用了一周的时间做调研分析和评估,最终落地了环境稳定性治理规划和方案。下面是我的分析评估和治理规划,仅供参考。
通过调研和访谈以及我自己工作过程中发现的种种问题,我抽象总结出了几个共同点:
调研分析出上述几点共性问题后,我输出了如下的稳定性治理规划:
项目名称 | 测试环境稳定性治理 |
---|---|
项目目的 | 降低测试环境不稳定因素,提升环境可用SLA;让测试同学有更充裕的时间做自己专业的事情;快速交付稳定可用的测试环支撑业务的快速发展; |
项目目标 | 短期目标:规范变更流程,降低维护成本,打通底层数据,变更权限收口;长期目标: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日 |
项目目标短期目标:规范变更流程,降低维护成本,打通底层数据,变更权限收口; 长期目标: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日
测试环境稳定性治理在落地的过程中,做了很多的技术优化以及跨团队的协调沟通,每个阶段都会遇到很多挑战和问题。当然,解决问题的过程中,个人也学到了很多新的技能,和不同的角色沟通协调过程中也学会了从不同的维度和角色的角度上去思考解决问题。下面是六个不同阶段中,典型的治理案例和我个人的思考收获。
这里的变更除了服务发布、参数配置的变更之外,还有测试环境的DDL变更。典型的案例有:
收获:很多时候,运维和DBA也是希望能规范发布和变更流程的(这样他们的工单和任务量会减少,能提效)。但如果业务方不配合,就很难推进。如果涉及到类似的事情,可以找运维和DBA负责人一起协调推动,团结相关的利益团体,反而能提高整体的进度和效果。
Stable环境规划图(仅做示意,已脱敏)
前面提到了多套测试环境多套数据源,这样会导致下面几点有趣的现象:
针对这些现象,我是怎么做的呢?
首先,选择一个环境作为基准环境,所有的DDL变更都先变更到基准环境,然后自动变更到其他环境的数据源上;
其次,stable环境落地,环境发散现象会逐渐收敛,搭建维护变更成本降低后,反而有时间资源做专门的优化工作;
然后,变更权限和入口收敛,通过统一的工单系统进行,降低整体的变更混乱现象,所有变更有迹可循有记录可查;
上面第三部分“打通底层数据”实际上已经介绍过变更权限收口了,这里我想分享的是之前做环境治理时候,和DBA负责人的一次聊天过程:
我:XX大佬,我要搞测试环境稳定性治理,希望减少随意的表结构变更和让底层数据保持一致,需要你的帮助;
DBA负责人:那可真是太好了,我一直想干这个事情,但我去推业务那边一直不搭理我,阻力很大。。。
我:那你看我们合作怎么样,我去和业务研发以及测试协调这个事情,你把底层的技术规范搞定?
DBA负责人:没问题,权限收口,表结构变更统一走工单,降低变更频次,规范数据库和SQL规范,我来搞定;
我:那行,你先准备相关的技术方案和规范,我们先挑一个环境试点,业务方我去沟通,好了我们就开始搞;
DBA负责人:可以,有啥需要我帮忙的尽管说,做这个事情对我们DBA也是个好事情。。。
分享上面这个对话过程,实际上要表达的是:很多时候我们工作中面临的痛点,也是其他人想解决的问题,寻求利益共同体,协作达成一件事,比孤军奋战更轻松,达成的效果也会更好。
谈到测试环境容器化,又是另一个故事了。
当时基础架构一直想推业务线接入容器,但一直很难推下去,理由也很正当:“业务迭代需求太多,没时间没资源接,而且稳定性也是要考虑的”。正好我在牵头做测试环境治理,希望能快速拉起环境和服务(ECS虚拟机部署服务太麻烦了,速度还慢),结果聊着聊着,一拍即合。我负责和业务方沟通,基础架构提供技术解决方案。
这里要补充说明下,不是我有多高的职位和权利,才能去和业务方沟通。而是测试环境的痛点已经影响到整个技术团队的需求迭代研发交付了,大家即使不太乐意,但这个问题不解决大家都很痛。
按照整体的治理规划,完成上述步骤后,就可以开始做环境割接,即:
搭建好stable环境,测试环境以容器化搭建,给业务方交付一套可用的测试环境,就下线回收一套ECS的虚拟机环境。同时相关的权限收口以及变更管理规范,沟通协调机制在不断的落地和推进过程中,也能不断解决环境使用过程中的种种痛点。
当然,环境割接过程中,有几个点需要注意:
整个测试环境稳定性治理过程中,除了上述的一些案例和技术方案之外,还有下面的一些技术优化手段,比如:
环境治理是个很复杂和碎片化的技术项目,同时也是团队协调以及人的问题。我要向大家分享的内容总结如下:
核心:定义问题-提出规划-制定方案-争取资源-推动落地;
技巧:寻求利益共同体一起协作,主动向上寻求帮助,切忌单打独斗;
过程:流程规范-权限收口-降低block因素-基础技术设施建设-技术轮子整合-长期坚持演进;
本文最后,为大家分享下我之前的整体规划落地思路吧,可惜中途由于某些原因离职了,测试环境稳定性治理,没能继续推动下去,还是蛮遗憾的。