测试环境使用问题及其优化对策实践 | 京东物流技术团队

京东云开发者
• 阅读 234

一、前言

我们经常听到研发人员和测试人员抱怨:“测试环境怎么又不能用了!”、“测试环境现在部署的是master包!”、“测试环境数据又被人改了?”、“测试环境怎么部署的这么慢!”、“测试环境里的公共服务,你用的时候我只能等着?”、“测试环境挂了,我自动化脚本全失败了!”测试环境是是测试实施的基础,测试环境健全以及是否稳定直接影响了项目的进度,而测试环境的指标包含质量、效率、成本,质量主要是环境的稳定性,效率是环境部署更新、环境使用的情况,成本主要是资源使用成本和人员维护成本,测试环境的质量、效率、成本会直接影响到项目的交付质量和交付效率

测试环境使用问题及其优化对策实践 | 京东物流技术团队

测试环境问题是每个测试团队都面临的问题,在2022年1024黑马午餐会和技术大佬的交流中,有同学也提出了环境治理、提高环境使用效率的问题,京东集团技术委员会主席曹鹏也给出了建议

测试环境使用问题及其优化对策实践 | 京东物流技术团队

解决测试环境问题理想状态下是存在多套环境,但是服务器资源成本和人员维护成本都不允许,那么我们就需要考虑在现有的工具、资源下,如何更好的通过规范和流程前更好的使用我们现在工具以保证我们的测试环境稳定性、提高测试环境的使用效率是我们需要去思考的问题,本文主要是介绍我们在整个测试环境治理中所做的一些探索和优化;

二、问题调研

我们为了针对性的解决大家在测试环境使用中的痛点,在二级部门内部发起了一次关于测试环境的调研,针对不同的岗位选取了20个样本,调研结果如下:

1、测试环境使用群体

结果:使用到测试环境的人大部分是研发和测试人员

测试环境使用问题及其优化对策实践 | 京东物流技术团队

2、使用测试环境一般作为什么用途

结果:使用测试环境一般功能测试>研发自测>性能测试

测试环境使用问题及其优化对策实践 | 京东物流技术团队

3、对现在环境编译部署的时间是否满意

结果:对于现在测试环境部署的效率不满意

测试环境使用问题及其优化对策实践 | 京东物流技术团队

4、觉得现在的测试环境是否稳定随时可用

结果:对于现在测试环境的稳定性不满意

测试环境使用问题及其优化对策实践 | 京东物流技术团队

5、对于编译部署的时间不满意,主要是哪些应用比较慢

| 应用 | 反馈次数 | | tms-bid-web-test | 1 | | tms-tfc-web-test | 1 | | tms-workbench-client-test | 3 | | tms-workbench-web-test | 1 | | tms-basic-web-test | 1 |

以下是我们调研后针对反馈的编译速度慢的应用取样部署编译时间:

•tms-bid-web-test:

测试环境使用问题及其优化对策实践 | 京东物流技术团队

•tms-tfc-web-test:

测试环境使用问题及其优化对策实践 | 京东物流技术团队

•tms-workbench-client-test:

测试环境使用问题及其优化对策实践 | 京东物流技术团队

tms-workbench-web-test:

测试环境使用问题及其优化对策实践 | 京东物流技术团队

•tms-basic-web-test:

测试环境使用问题及其优化对策实践 | 京东物流技术团队

6、大家认为环境不稳定不可用的原因主要是

•大家共用一套测试环境,研发联调,测试回归,很容易出问题

•偶尔存在中间件测试环境host地址变更情况

•目前workbench测试环境有两台机器,部署时正常来讲是为了保证服务可用,部署重启时至少1台提供服务,但是实际两台部署的中间间隔是固定的60s,第一台从部署到提供服务大于60s,这样导致两台服务均不可用,而workbench又是多团对开发,导致很多时候在等待服务启动,研发测试效率变低

•接口经常超时

•下游业务测试依赖应用较多,如测试京驿app如较下游系统:京驿app需求,需后端tfc,rfq,basic,cmc,jdi等环境持续可用,排查时,服务可用状态不持续在线

7、现在测试环境最令人不满意或者影响工作的地方

•测试环境共有一套,不做区分,不稳定

•测试环境比较稳定,目前暂无这些问题

•配置更新还需要重新编译

•workbench用的人多,经常有人部署导致耽误测试时间

•不同分组jmq未隔离

•高可用

•环境太少,如果有上线回归,就占用测试环境了

•下游下单需多次排查测试环境,平台连接后端服务不可用/无可用的后端服务实例

•经常宕机

•频繁部署,编译时间长,部署后杰夫服务不可用

•部署起来太慢啦,有的宿主机好久不动,突然服务停了,比如通联,不清楚代码是否有问题

•basic环境部署时,其他系统基本都用不了了,需要等

•部署时间长,部署人员多,长时间处于部署中 货航系统还比较满意,偶尔系统间交互会有问题

•频繁部署,影响工作效率

8、用户期望测试环境能满足用户哪些需求

•研发联调,集成测试有单独环境支持

•测试回归环境有单独环境,不要跟功能测试环境混用

•稳定版本提供单独环境,对应线上环境,以对外提供稳定的环境

•稳定性

•单测覆盖率的提升方面是否有助力方案;

•研发是否可操作自动化的验证方式;

•高可用

•聊天环境,测试环境,独立的

•环境稳定

三、解决方案

我们针对调研反馈的问题和现在已知的测试环境问题进行解决,主要解决内容如下:

1、问题:系统编译部署的等待时间长

解决方案:寻求行云部署帮助,优化编译命令和配置

测试环境使用问题及其优化对策实践 | 京东物流技术团队

优化结果:编译速度由原来的5~10分钟,降低至3分钟以内;

tms-bid-web-test优化前:

测试环境使用问题及其优化对策实践 | 京东物流技术团队

tms-bid-web-test优化后:

测试环境使用问题及其优化对策实践 | 京东物流技术团队

tms-tfc-web-test优化前:

测试环境使用问题及其优化对策实践 | 京东物流技术团队

tms-tfc-web-test优化后:

测试环境使用问题及其优化对策实践 | 京东物流技术团队

2、问题:系统稳定性不好,公用的应用basic、workbench等部署频繁,部署时候影响别人使用

解决方案:使用行云现有编排部署方式,核心尤其是对其他应用提供服务的应用,主干测试分组中增加到2台实例,在部署的时候采取滚动部署,即一台机器部署且探活jsf接口可用后,再执行第二台机器的部署,在部署过程中保持有一台实例能够提供服务,减少因为频繁部署导致的测试系统不稳定问题

编排部署配置方式:

(1)扩容

大部分测试分组当前都是一台机器部署,所以在滚动部署之前需要扩容到两台机器,在实例列表页面选择测试分组,在容器状态中选择扩/缩容,选择扩容操作

测试环境使用问题及其优化对策实践 | 京东物流技术团队

扩容数量、扩容版本默认当前内容,扩容后,容器为2

测试环境使用问题及其优化对策实践 | 京东物流技术团队

确认成功后,系统会新增一台机器,并自动进行部署,部署成功可执行后续操作

测试环境使用问题及其优化对策实践 | 京东物流技术团队

(2)编排部署(编译+部署)

在部署编排页面点击【新增部署编排】

测试环境使用问题及其优化对策实践 | 京东物流技术团队

在公有模版里面选择【编译+部署】

测试环境使用问题及其优化对策实践 | 京东物流技术团队

在打开的默认模版中,构建任务选择需要编译的分支,通常我们选择的是test分支

测试环境使用问题及其优化对策实践 | 京东物流技术团队

在滚动部署节点,基本设置中

选择分组:我们要部署的分组,通常是日常测试分组

更新方式:按每分组数量

每次更新容器个数:1

每次更新时间间隔:可以使用默认的15s

测试环境使用问题及其优化对策实践 | 京东物流技术团队

任务步骤环节,需要添加jsf下线、jsf上线2个节点,使用默认的配置即可

测试环境使用问题及其优化对策实践 | 京东物流技术团队

确认成功后,保存并且运行,会先进行编译构建操作(此处不赘述),编译构建完成之后,会进行滚动部署操作,分2个批次进行部署,先进行jsf下线

测试环境使用问题及其优化对策实践 | 京东物流技术团队

此时,jsf下线后,会有一台实例仍然存在,一台实例jsf下线

测试环境使用问题及其优化对策实践 | 京东物流技术团队

部署完成之后,会进行jsf存活的验证,验证成功后,才执行后续操作

测试环境使用问题及其优化对策实践 | 京东物流技术团队

当jsf探活100%后,会进行我们设置的sleep15s的操作

测试环境使用问题及其优化对策实践 | 京东物流技术团队

进行第二台实例的部署,全都部署完成后两台实例jsf都可用

测试环境使用问题及其优化对策实践 | 京东物流技术团队

测试环境使用问题及其优化对策实践 | 京东物流技术团队

全部部署完成后,咚咚提醒执行完成

测试环境使用问题及其优化对策实践 | 京东物流技术团队

每次更新版本的时候,直接到部署编排页面,到编译部署任务里面点击运行就可以了!

测试环境使用问题及其优化对策实践 | 京东物流技术团队

(3)编排部署-可选

应用场景:不需要编译操作,只做部署操作

部署编排页面点击场景化部署编排

测试环境使用问题及其优化对策实践 | 京东物流技术团队

选择滚动部署

测试环境使用问题及其优化对策实践 | 京东物流技术团队

选择待部署分组(主干测试环境选择日常测试分组),部署配置镜像默认使用当前使用镜像

测试环境使用问题及其优化对策实践 | 京东物流技术团队

执行下一步操作,按数量更新,设置每次更新容器数,间隔时间,选择是否jsf上下线、负载均衡摘除/挂载,np下/上线操作,是否勾选负载均衡和np下/上线要看是否配置负载均衡和是否在np关联域名

测试环境使用问题及其优化对策实践 | 京东物流技术团队

保存并运行后开始滚动部署操作

测试环境使用问题及其优化对策实践 | 京东物流技术团队

(4)重启操作-可选

应用场景:只重启,不编译、不部署

部署编排页面点击场景化部署编排

测试环境使用问题及其优化对策实践 | 京东物流技术团队

选择制定ip重启

测试环境使用问题及其优化对策实践 | 京东物流技术团队

手动输入测试环境的2台实例ip,点击下一步

测试环境使用问题及其优化对策实践 | 京东物流技术团队

批次设置2,每个批次50%,暂停设置选择自动流转,间隔时间自定义,流量类型选择jsf流量上/下线

测试环境使用问题及其优化对策实践 | 京东物流技术团队

设置完成后,每次重启的时候过来点击运行就可以了

测试环境使用问题及其优化对策实践 | 京东物流技术团队

(5)部署效果(过程详解,不需要操作)

以部署编排为例(编译构建页面的部署一样的效果)

测试环境使用问题及其优化对策实践 | 京东物流技术团队

先执行jsf下线操作,此时该应用只有一台实例存活

测试环境使用问题及其优化对策实践 | 京东物流技术团队

再执行jsf上线操作,会一直探活jsf接口是否可用,当jsf接口可用后,会jsf上线验证成功

测试环境使用问题及其优化对策实践 | 京东物流技术团队

此时jsf接口2个都是存活的,其中一个部署的是新程序包,一个部署的是老程序包;

测试环境使用问题及其优化对策实践 | 京东物流技术团队

在第一批次部署成功之后,会进入我们设置的60s等待时间

测试环境使用问题及其优化对策实践 | 京东物流技术团队

等待时间结束后,执行jsf下线上线操作

测试环境使用问题及其优化对策实践 | 京东物流技术团队

测试环境使用问题及其优化对策实践 | 京东物流技术团队

最终两台服务器都可用,部署的都是新的程序包

测试环境使用问题及其优化对策实践 | 京东物流技术团队

(6)日志查看

因为两台实例部署后,调用流量可能会随机打到某一台机器上,查看日志可以在实例列表-日志服务中选择当前所有机器,选择日志路径以及搜索关键字进行查询

测试环境使用问题及其优化对策实践 | 京东物流技术团队

优化后结果:

•一键式部署,一键操作编译+部署操作,不需要随时等待编译部署完成,完成之后咚咚给予提醒

•保障环境稳定性,部署过程中随时有一台应用可用,不会因为频繁部署导致环境不可用形象测试效率

3、问题:没有单独的测试回归环境,和功能测试环境一起使用

解决方案:每个测试应用单独搭建一套回归测试环境,部署master版本,用于上线前的回归测试以及自动化回归测试

测试环境使用问题及其优化对策实践 | 京东物流技术团队

优化后结果:

master分支和test分支进行环境隔离,在回归测试和日常需求测试过程中互不影响

测试环境使用问题及其优化对策实践 | 京东物流技术团队

4、问题:每次配置更新还需要重新编译

•解决方案:有重启并更新配置的操作,但是不推荐,推荐重新发布,会生成另一个版本号,这样方便回滚,如果用重启并更新配置,虽然生效快,但是新配置不可回滚

测试环境使用问题及其优化对策实践 | 京东物流技术团队

5、问题:测试环境的维护困难,不清楚当前测试环境是否可用,哪些环境当前异常

解决方案:自研测试环境监控看板工具,调用行云接口做应用存活探活,实时查看当前不同业务条线测试环境当前状态(5分钟自动刷新,支持手动刷新)

测试环境使用问题及其优化对策实践 | 京东物流技术团队

测试环境异常不可用的情况下,会同步发送咚咚消息给测试环境操作人员以及维护人员,相关维护人员接收到消息之后去查看环境异常原因

测试环境使用问题及其优化对策实践 | 京东物流技术团队

6、问题:测试环境异常导致每天的自动化执行失败

解决方案:提供封装好的接口,每天会配置好的应用测试分组和机器做探活,如果多次失败后重启应用,待探活成功后触发流水线自动化任务

接口:

/** * 获取所有机器IP * @return */

public List getAllMachine(); /** * 获取机器状态。 * 该方法用于获取机器的当前状态。 * @return 机器的状态 / public void machineStatus(); /*\ * 根据应用名称和组名称获取当前状态 * @param appName 应用名称 * @param groupName 组名称 * @return 状态值,true表示获取成功,false表示获取失败 */ Boolean getStatusByAppAndGroup(String appName,String groupName);

是否需要做探活的标识:

测试环境使用问题及其优化对策实践 | 京东物流技术团队

四、小结

健全、稳定、体验良好的测试环境,一直是影响产品迭代效率和稳定性的关键环节,也是做好自动化测试的必要条件,我们在经过针对性的环境优化后,对不同的目标完善了测试环境、回归环境、自动化环境、性能测试环境等分别独立的测试环境的的隔离,尽可能了保证了测试环境的稳定性,在保障资源预算的前提下,提高了测试环境的使用效率,并且有针对性的做环境监控和异常预警,使环境维护人员有针对性的去解决环境问题,减少环境维护的人员成本。

作者:京东物流 朱飞

来源:京东云开发者社区 自猿其说 Tech 转载请注明来源

点赞
收藏
评论区
推荐文章
亚瑟 亚瑟
3年前
React之集成测试 –测试环境
本章节介绍了可能会影响你测试环境的因素,并包含某些场景下的建议。测试运行器使用,,等测试运行器能像编写JavaScript一样编写测试套件,并将其作为开发过程的环节运行。此外,测试套件也将作为持续集成的环节运行。Jest与React项目广泛兼容,支持诸如模拟、和等特性。如果你使用CreateReactApp,且
测试环境治理之MYSQL索引优化篇
测试环境这个话题对于开发和测试同学一定不陌生,大家几乎每天都会接触。但是说到对测试环境的印象,却鲜有好评,下面就主要给大家分享一次实际工作中的Mysql性能优化实践,与大家共勉~
单元测试利器——手把手教你使用Mockito
作者:京东零售秦浩然从你成为开发人员的那一天起,写单元测试终究是你逃不开的宿命!那开发人员为什么不喜欢写单元测试呢?究其原因,无外乎是依赖。依赖其他的服务、依赖运行的环境、等等,各种依赖都成为了我们写单元测试的绊脚石。那现在有个单元测试利器可以帮我们解决依
Stella981 Stella981
3年前
Selenium自动化的JUnit参数化实践
作为自动化测试人员,经常会遇到这样Selenium测试自动化场景:_需要一次又一次地执行相同的测试用例,只是使用不同的输入和环境配置,从而使工作变得冗长且多余。_为了处理这种用例冗余,大多数人都会选择可以选择参数化测试。使用参数化测试,测试人员可以再次运行相同的自动化测试脚本,但使用不同的数据。参数化测试通过利用测试方法收集结
Stella981 Stella981
3年前
Jenkins配置下拉菜单联动效果
  在使用Jenkins集成时,经常需要配置一些环境信息,由于测试、线上、预发布需要切换环境和域名,需要在Jenkins中配置下拉菜单联动效果。  首先选择参数化构建过程,然后首先配置环境,环境分为:测试环境、预发布环境、正式环境,选择的组件为ChoiceParameter,Name定义为environment,选项为test、pre、onli
Easter79 Easter79
3年前
Tidb的日常
TiDB也使用了一段时间,持续记录一些日常,防止大家也踩到同样的坑~🥕raftsynclog目前,公司使用的Tidb分别部署在生产环境和测试环境,生产环境的是在阿里云,而测试环境是在公司的机房。周末的时候,机房不知道为啥断过电,什么都不知道的我,周一来到公司发现测试环境的Tidb挂了(这是肯定的,因为停过电嘛~),然后就是怎么都启动
Wesley13 Wesley13
3年前
Dubbo服务主机IP没有绑定的坑(dubbo注册时出现主机上没有的IP的解决方案)
初次使用dubbo,在研发环境和测试环境测试没有问题,然后将服务上线,上线后,Dubbo服务端启动正常,客户端启动失败,并提示Causedby:java.lang.IllegalStateException:Failedtocheckthestatusoftheservicecom.xxx.xxx.service.Login
Stella981 Stella981
3年前
Docker搭建部署Node项目
前段时间做了个node全栈项目,服务端技术栈是nginxkoapostgresql。其中在centos上搭建环境和部署都挺费周折,部署测试服务器,接着上线的时候又部署生产环境服务器。这中间就有很多既无聊又费精力,吃力不讨好的"体力活"。所以就开始思考怎么自动化这部分搭建部署的工作,也就引出了Docker。什么是Doc
Wesley13 Wesley13
3年前
MySQL 快速创建千万级测试数据
备注:此文章的数据量在100W,如果想要千万级,调大数量即可,但是不要大量使用rand()或者uuid()会导致性能下降背景在进行查询操作的性能测试或者sql优化时,我们经常需要在线下环境构建大量的基础数据供我们测试,模拟线上的真实环境。废话,总不能让我去线上去测试吧,会被DBA砍死的创建测试数据的方式
陈哥聊测试 陈哥聊测试
7个月前
你在测试金字塔的哪一层(上)
在准备将软件上线到生产环境之前需要进行测试。随着软件测试方式日趋成熟,软件开发团队的测试也在取代大量手动测试,逐渐实现自动化测试。