测试环境及自动化建设

原创:王东升 张少华

环境建设的背景
早期的测试环境本身并不复杂是典型的单服务加数据库的结构,主要由开发同学在本地搭建供调试及测试使用。但是随着系统更多的模块和更多的中间件在本地搭建服务已经变的难以控制了。雪上加霜的是问题总是在这种环境中随时出现,为了确认究竟是环境问题还是代码问题常常需要花费大量。在这个上面花费的烦琐投入成为了很多同学在研发过程中的痛。罗马不是一天建成的,环境作为研发过程的基础也需要持续的建设与完善,早期建设的基本逻辑对长期的发展至关重要。这次我们主要介绍下环境早期建设的基本思路、使用的方案和遇到的问题,以及后续升级的思路。
基于vagrant环境建设方案
为了满足开发调试、系统测试等目标我们需要快捷、稳定的测试环境,那导致环境不好用的拦路虎有哪些呢?我们把之前的问题大概分成了几类:
1.基础环境底操作比较复杂
2.需要大量的基础组件知识
3.复杂的系统拓扑让问题的跟进变的异常复杂
为了解决这类问题我们在规范化和工具化的药方中给出了以下的解决方案:
1.使用统一的底层基础系统,解除由于底层基础不一致导致的问题,由于当时Docker本身对基础组建支持和操作系统的支持尚不够完善,所以在最早的版本中我们使用的支持虚拟化技术的Vagrant工作+和线上完全一致的CentOS作为基础环境。如果对Vagrant本身感兴趣可以参考开源社区的文档——http://club.shopex.cn/b2b2c/dev/700.operator/100.deploy/400.vagrant-install.html 。
2.在基础环境内配置一套包含MySQL、Redis、Mongo、Nginx等,以保证在环境能使用的基础组件均与线上一致且处于可用的状态。
3.对于第三方依赖例如对阿里云的MNS等依赖进行统一的MOCK,并提供随时可以配置使用的HTTP类MOCK系统作为环境的重要组件。
4.环境系统以及子系统的拓扑由环境管理平台统一管理,系统中模块采用有限的几种模式开发(包括Django、Go、Node、Flask几种架构)并提供基础环境使用的统一的管理接口(我们通过Makefile进行封装管理)。
5.提供整个环境系统可视化的管理平台,以方便任何角色的同学快速确认环境的状况并提高环境定位的效率。
6.建设统一的业务操作系统,方便快制造场景以进行测试。
在这里插入图片描述

有了基础系统后接下来就是要支持支持研发迭代流程,迭代流程支持主要包括开发环境和测试环境的支持。以下是新模块接入和基础环境更新的流程:
在这里插入图片描述

对于开发以及测试的同学在申请环境的时候,第一步拿到的是今天凌晨生成的一个基础环境,该基础环境生成时已经经过功能测试保证基础环境是可用的状态。第二步,环境管理工具对基础环境进行更新。更新的原则是在子系统中除指定模块更新到指定的分支和版本外,其余模块更新到已经经过持续集成测试的lastStable状态的代码。例如我们可以通过以下命令执行其中一个模块upp moduleA -r xxx -b yyy #将moduleA更新到xxx仓库的yyy分支另外也可以通过环境管理控制平台对模块进行更新等操作
在这里插入图片描述

基础MOCK系统建设
为了保证测试顺利进行MOCK在测试环境中非常重要。MOCK按照使用的状况可以分为两大类:第一类是测试环境一直要使用的外部模块MOCK,第二种是在不同子系统中需要切换真实系统和MOCK系统的内部模块MOCK。对于第一种我们完全模拟第三方行为,并通过API以及可视化管理平台进行管理。例如阿里云的MNS在我们的测试环境通过域名重定向到本机MOCK的服务中,该服务除性能外基本与线上MNS无差异,这保证了用户在测试过程中既要真实又要安全高效的目标。另外还根据测试环境对重复场景验证的要求提供了快照保存等功能。
在这里插入图片描述
另一类一般在初始化环境时确定选择真实模块或者是MOCK模块,替换过过程由环境系统管理工具统一操作,例如:
python preparenv.py -k xmodule #将xmodule替换成mock模块
MOCK本身管理交给环境管理系统来做,在我们的环境中大多数模块都存在一个MOCK的支持快速测试的替换模块。
测试工具模块
测试工具系统是另外一个效率提升的实践,该模块的目标是将提高达到目标场景的速度,举例说如果我们要测试一个注册过的用户我们一般可以通过APP一步步注册达到这个状态,但是除了测试注册过程外注册本身我们并不需要特别关注。因此在我们的环境工具系统中,我们将业务场景进行分类聚合,形成一系列的可以快速达到的可以操作的场景,如下:
在这里插入图片描述

测试工具系统可以非常有效的提高业务测试操作的效率,此外业务系统外也有一些列需要测试同学关注的测试,这些操作平时也占用来的大家大量时间,好比说系统时间修改,数据库恢复等等。对于和业务无关的操作我们也抽象出了公用的操作模块以提高测试过程的效率:
在这里插入图片描述
在这里插入图片描述
收益与问题
通过系列的环境系统建设开发和测试的效率有了明显的提升同时也带来了另外一个好处——测试同学可以以更大的自由度参与到不同方向项目测试过程中来,经验告诉我们随着团队规模的扩大有效的并发工作模式是提高效率非常关键的因素。在看到收益的同时存在的问题也不能忽视,测试环境系统建设过程中主要存在两个问题:首先,在环境集中管理后对机器资源的需求急剧增大,即便是我们不断的扩大自己测试机器的小机房的规模依然承受了比较大的压力。另外,环境系统本身变复杂后如何去管理和维护也成了一个挑战。对于第一个问题我们探索了一些列的方案,其中一个措施是将底层环境从Vagrant迁移到Docker中去,迁移过程却是带来效率的提升。另外一个问题我们尝试了拆分模块与封装底层的方式进行优化。即使经过了很长时间发展,系统仍然不能称为完美,希望未来能把这块儿逐渐开放出来,有更多的同学一起参与持续改进。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值