01

   背景

会员业务是公司的重要业务之一,为广大会员用户承载最基础的服务保障,随着会员数的破亿,业务复杂度也是呈现几何倍的增加,如何高效的支持会员业务的测试,也成为了会员测试团队不得不面对客观挑战,这其中最核心也是最基础的莫过于测试环境的治理,现将测试环境特点总结如下:

  • 特点1:基础应用服务数量多达数百个,分布在几十个域名下,维护成本高。

  • 特点2:调用关系复杂,应用之间互相调用,并且相互依赖,联调成本高。

  • 特点3:服务之间调用依靠路由转发、服务发现,定位成本高。

基于如上特点,测试过程中环境会有如下问题:

  • 问题1:应用数量众多,每个应用基础配置随意,且存在个性化配置,不好管

    理。

  • 问题2:测试环境公用情况严重,依赖于各个研发或测试私服,稳定性比较差。

  • 问题3:路由功能无法统一管理,调用关系混乱,环境出现问题时,排查问题时间成本高,需按调用关系逐一排查。

  • 问题4:测试改进基建不稳定,一些基础测试工作稳定性较差,收效甚微。

02

   会员测试环境发展史

  阶段一:手动阶段  

经过一段时间对项目测试时间的积累,经过细致系统的分析后,测试环境是项目测试中耗时较多、最为不可控的环节,本着质量可控的原则,测试团队决定重点建设测试环境,从根本上对测试质量和效率进行把控。申请到若干台固定虚机作为测试机,结合业务打包方式和部署流程,手动在虚机上进行搭建,我们称之为“手动阶段”,具体流程如图所示:

由于机器有限,单台需求需要部署多个应用,为防止端口号冲突,使用wiki进行机器、应用、端口号的维护工作。

解决问题:

测试团队接手测试环境打包-部署-维护流程,质量和效率可控。

存在问题:

  1. 每次在新机器部署应用时需要安装依赖,此依赖无固定版本、使相同的应用在不同机器部署时配置、启动命令等不一致。

  2. 一个机器部署多个应用,未避免冲突及后续nginx配置,人为规定相同机器不能部署相同应用,且端口号依靠wiki维护,维护成本高且时效性差,准确率不高。

  3. 个人习惯不同导致应用配置、启动脚本不一致,难于统一进行集中管理。

  4. 无代码编译过程,部署代码包完全依赖研发,时效性低。

  5. 配置类工作较多,操作繁琐、效率低。

  6. 对环境部署人员能力要求高。

  阶段二:脚本阶段  

随着会员业务的不断壮大,服务的逻辑愈加复杂,原手工方式的部署不堪重负,出现了很多的特殊处理,已经不能满足业务测试需求,决定使用Jenkins能力进行规范化部署,将应用配置信息统一在mysql数据库中进行维护,该阶段我们称之为“脚本阶段”,整体流程图如下:

在数据库中对每个应用基础信息进行维护,包括代码路径,基础依赖,编译命令,启动脚本,具体如下图:

前端页面支持单应用部署,在Jenkins构建选择对应应用、填写分支、选择机器后可进行部署:

Jenkins构建的过程如下图展示:

代码部署到服务器详解:

解决问题:

  1. 每个应用在数据库有基础配置,可进行统一管理及维护。

  2. 依赖、服务器初始化、应用启动等工作通过脚本统一完成,规范化且版本统一好维护。

  3. 代码进行统一管理,接手代码编译打包过程,服务质量可把控。

  4. 部署环境实现自动化,提高部署效率。

  5. 对部署环境人员要求降低。

存在问题:

  1. 配置内容没有页面操作,只能在数据库操作,操作不方便。

  2. 机器固定且无法动态扩容,出现问题后无人维护,无法支持个性化部署。

  3. 路由配置文件无法统一维护。

  4. 环境未按使用方式、场景进行区分。

  5. 扩展性差,遇到服务器迁移时成本过高。

  阶段三:平台化  

随着业务上代码架构的升级,微服务化,容器化,云原生化的不断升级,单独脚本化的配置已经无法适配业务的迭代,测试环境的部署仿佛一夜之间又回到的最初始手动阶段。同时业务上又出现了新的诉求:

  • 动态申请机器部署测试环境,即用即抛。

  • 单应用部署拓展到模板化部署,支持多应用的部署,配置,满足场景级测试诉求。

  • 多角色多用途使用,支持开发联调/测试验证,支持联调环境,测试环境,自动化环境等等。

  • 复杂的路由配置和参数替换,支持不同测试能力的对接等等。

    在此背景下,公司测试部基于公司资源搭建环境平台,完成测试环境资源的统一分配、基准环境的统一部署、应用统一管理和部署、环境一键使用等功能,完成测试基础工程能力建设的关键一环,为整体测试效能的提升打下基础,环境平台能力介绍如下图:

依托于测试部提供的测试环境平台进行业务适配,截止到目前,会员业务的测试环境已全面对接平台,支持超过数百应用,日均部署次数百余次,服务人次超百人,使用平台搭建测试环境测试项目覆盖率为 90%+,稳定环境部署成功率为 99%+,项目手动部署成功率为 90%+。该阶段我们称之为“平台阶段”,具体整体流程图如下:

解决问题:

  1. 每个应用的基础配置在平台维护,页面可操作,集中管理、灵活配置(配置个性化、nginx、依赖host、注册中心)。

  2. 会员测试只需要维护自定义脚本,服务器基本依赖托管平台处理。

  3. 代码编译等操作托管公司内部CI/CD,流程规范,提高效率,版本可控。

  4. 环境按使用方式进行区分,减少因使用混乱导致的环境问题,避免分支与环境冲突。

  5. 通过权限控制人员可见系统及可操作范围。

  6. 联调环境方便管理,可集中度量。

03

   解决业务痛点

在结合会员业务特点不断迭代测试环境,我们将重点解决如下几个业务痛点:

  1. 测试环境整合  

基于用途整合测试环境,按域名区分进行管理,每个域名下按使用功能不同,搭建不同测试环境:

  • 稳定环境:各应用每天定时部署master分支,与线上服务代码保持一致,对内,对外提供联调稳定联调环境、自动化执行环境。

  • CI环境:当git变更时触发CI模板,进行环境部署后启动个性化脚本,执行自动化和安全测试,确保问题提前暴露。

  • 业务测试:基于稳定分支进行配置和分支信息的修改,部署环境后进行项目测试,测试完成后环境释放,服务器可循环使用。

理想的环境搭建是只部署修改或新增的应用,其他应用使用稳定的,在降低测试环境搭建成本的同时减少因配置因素导致的其他环境问题。

例如图中需要完成项目:测试项目一,此功能需要用到应用A、应用B、应用C、应用D完成整体流程测试,本次只修改应用C、应用D,只部署这2个应用,剩余应用使用稳定环境的即可,环境搭建如下图展示:

  2. 路由管理  

2.1 nginx 管理

会员应用之间路由强依赖 nginx,会员测试环境是否可用,路由服务是否正确全部依赖于 nginx 配置是否正确,此种配置重要且个性化,经过协商会员测试与环境平台公共管理配置文件,业务负责配置文件管理及研发自定义脚本,环境平台提供配置、替换的能力,按照如下分工进行配合,保障 nginx 稳定运行,流程图如下:

就图中的项目测试而言,如何保证稳定环境中的应用可以回调到项目环境中对应应用,而不是稳定环境中的对应应用,一旦修改了如图应用B的调用地址,就无法保证2套环境可并行使用,此问题可归结为路由问题,如下图展示:

服务之间调用强依赖 nginx,如果 nginx 可动态的获取变更的应用 ip+端口号,未变更的应用则使用稳定环境的应用来提供服务问题就会变得简单,这也就解决了临时环境与稳定环境的相互调用问题,效果如下图:

想实现如上图的效果,需要通过路由来处理,具体流程如下:

路由是转发功能,具体逻辑还在应用中,启动具体应用时除了应用的必要参数外,会员测试团队还添加个性化内容,用于测试及相关质量改进,具体流程如下:

2.2.nginx集成guardro

QAE 是公司内部的基于 Docker 的应用引擎,可实现高效、可靠的自动化运维。guardro 即 Guardro-template,通过订阅 QAE Controller(Guardro)的事件消息,可以实时更新 nginx 的 upstream 文件,并且触发nginx重新载入配置。通过引入 guardro 来解决容器动态申请服务导致 ip 不固定替换 nginx 失败的问题,它实现的过程如下:

  1. 订阅 QAE 应用的实践消息

  2. 在本地开启一个小的 web 服务器,用于接收消息

  3. 当有消息到来时,根据消息内容,将 template 文件内特定的部分替换,生成相应 nginx 的 upstream 文件

  4. 触发 nginx 重新载入配置

引入guardro后,具体流程如下展示:

2.3.注册中心

服务之间调用逐渐从nginx改为微服务调用,为适配线下测试,对应用配置、部署方式、个性化脚本优化、Eureka自身进行升级,支持同步稳定注册中心的其他应用及替换能力,实现模板中应用按顺序部署自动注册功能,实现环境一个注册中心的能力,同时支持稳定与项目注册中心分离,流程如下:

核心能力依赖于eureka-plus进行二次开发,部署的时候除了部署注册中心外会额外部署一个同步工具,该工具实现了同步+过滤的功能,实现能力如下:

  3.环境问题智能定位  

业务链路复杂带来的最显著的问题就是排查问题困难,很多因素都有导致这样的问题出现,如依赖服务部署失败,路由跳转错误,服务配置错误等等问题,我们协同公司已有全链路平台rover和图谱平台atlas对接到测试环境上,提供了一键问题定位能力,解决方案如下:

3.1整体交互图

3.1.1 qae对接skywalking

skywalking可提供jar包形式,qae容器在启动时引入即可

3.1.2 nginx对接全链路

nginx升级为openresty、需要预装lua、同时需要业务线自己对接日志收集系统,动态变更监听的IP地址,进行信息投递完成调用链路展示。

3.2 最终链路呈现

应用与路由对接后,可清晰展现调用链路信息,便于测试快速确定项目测试过程中环境阻塞问题,迅速解决环境问题,提高测试效率。

04

   展望

会员测试环境经过几年的积累和治理已经取得阶段性成果,在支持测试业务和质量改进上起着至关重要的作用,也是随着降本增效的整体浪潮下,测试环境的建设也会从虚拟化->容器化->云原生化持续不断发展,下一步继续协同测试环境平台尝试云原生化迁移,进一步赋能业务,进一步保持先进,进一步降本增效。

也许你还想看

会员接口治理的探索与实践

视频生产大镜像优化实践

爱奇艺数据湖实战

 关注我们,更多精彩内容陪伴你!

会员测试环境治理之路相关推荐

  1. KT Connnect 轻量级云原生测试环境治理工具

    简介 KT Connect ( Kubernetes Developer Tool ) 是轻量级的面向 Kubernetes 用户的开发测试环境治理辅助工具.其核心是通过建立本地到集群以及集群到本地的 ...

  2. .NET持续集成与自动化部署之路第三篇——测试环境到生产环境的一键部署策略(Windows)...

    Jenkins测试环境到生产环境的一键部署策略(Windows) 一.前言 前面我们已经初步实现了开发集成环境.测试环境的持续集成(自动化构建.自动化测试.自动化部署).但生产环境自动化部署迟迟没有推 ...

  3. 重磅!我国建成首个自动驾驶封闭高速公路测试环境

    来源:智车科技 摘要:根据工业和信息化部.公安部.江苏省人民政府共建"国家智能交通综合测试基地"的总体规划和建设要求,公安部交通管理科学研究所坚持"自动驾驶汽车产业发展与 ...

  4. 阿里巴巴是如何管理测试环境的?

    来源 | 公众号:云效(ID: ali_yunxiao) 作者 | 林帆(花名金戟) 正式环境的稳定性,除去软件自身的质量因素,主要与运行的主机.网络等基础设施相关,而测试环境的稳定性则更多受到人为因 ...

  5. linux二进制文件构建mysql_linux上二进制部署mysql详细步骤(测试环境常用)

    一.简介: 关于在linux上二进制部署mysql,我其实现在linux已经很熟练了,那是一年前的曲折之路.不过这篇文章还是有参考意义,毕竟测试环境可以再3分钟就弄好mysql服务器.还是很happy ...

  6. 开发之痛:稳定的测试环境,怎么就那么难

    简介:开发之痛:稳定的测试环境,怎么就那么难.对于生产环境,准确.稳定最重要,我们推荐以应用为中心的基于OAM和IaC的实践方式:对于测试环境,隔离.低成本和稳定的依赖是最重要的,我们推荐基于稳定环境 ...

  7. 阿里测试环境运维及研发效率提升之道

    摘要: 生产环境最关注的就是稳定,测试环境更关注的是研发效率,如何从一行代码最快的保证质量发到线上去,这个是我们测试环境最关注的.在全球运维大会上,阿里巴巴研发效能事业部运维中台技术专家--刘湘疆(青 ...

  8. 程序人生:软件测试工程师,如何从手工测试转成自动化测试?这可能是每个测试要走的路...

    做测试十多年,有不少人问过我下面问题: 现在的手工测试真的不行了吗? 测试工程师,三年多快四年的经验,入门自动化测试需要多久? 自学自动化测试到底需要学哪些东西? 不得不说,随着行业的竞争加剧,互联网 ...

  9. [转] 测试员,敢问路在何方(来自微软工程师)

    [转] 测试员,敢问路在何方(来自微软工程师) Date: 2015-05-22 转自: [译]测试员,敢问路在何方?来自微软工程师 [译者注]: 原作者是Qingsong Yao,来自微软.他的Li ...

最新文章

  1. 538. Convert BST to Greater Tree
  2. 点击调用ajax,jQuery ajax在点击时调用,仅工作一次
  3. 成对的交换链表的节点 Swap Nodes in Pairs
  4. Vue的阻止冒泡与阻止默认
  5. Nginx中的break和last
  6. Oracle中如何判断字符串是否全为数字
  7. javascript 关键字this
  8. java集合了类面试题_一些集合类面试题,说不定你就会遇到
  9. RocketMQ源码解析:Message存储
  10. 生成Apk签名证书keystore,openssl与证书,keystore,jks,pem/pk8
  11. 数据分析报告的 8 种颜色
  12. 快手:看见每一种生活(一面凉经)
  13. 基于javaagent-ByteBuddy监控方法执行耗时
  14. Android在虚拟机和安卓机上运行不了
  15. android 盒子刷 下载,一加5刷机盒子app下载_一加5刷机盒子安卓最新版v7.5下载 - Win7旗舰版...
  16. Python-使用正则表达式爬取斗破苍穹小说文字内容(使用Requests库实现)
  17. java使用字符流进行写入和读取
  18. Python爬虫编程思想(70): 项目实战--抓取京东商城手机销售排行榜
  19. 天球坐标系、地球坐标系与地球自转有无关系?哪一种便于描述地面观测站的空间位置?哪一种便于描述人造地球卫星的位置?总结GNSS定位的时空基准? GPS卫星定位中,时间系统有何重要意义?
  20. 【软件测试】使用python快速生成系统测试报告

热门文章

  1. 项目管理/思维技术实战专家陈永生
  2. linux编辑lnk文件,如何打开和编辑Windows .lnk快捷方式文件? | MOS86
  3. 三角形的缩放动画,不会做的看过来!
  4. php中errorreporting,php中error_reporting函数用法详解_PHP教程
  5. nsga 的java实现_Java – Scala遗传算法(GA)库中的模拟二进制交叉(SBX)交叉运算符
  6. Habor镜像仓库的使用
  7. 专业查苹果测试软件,电池寿命检测软件苹果版-iphone查电池寿命appv2.1.5 iOS版-腾牛苹果网...
  8. android 5.1 壁纸路径,Android5.1 壁纸来源选项中有两个“壁纸”选项
  9. Swift Archiving序列化
  10. excel合并单元格和左对齐