微服务架构下的测试应对策略微服务架构下的测试应对策略
系统架构的演变
伴随着互联网的快速发展,Web应用系统从面向企业内部发展到面向市场用户,业务的日趋复杂以及用户量的上升,那些曾
经工作良好的单体应用开始遇到开发、测试、部署、发布各个方面的瓶颈,诸如扩展新增功能艰难、系统庞大难以维护、编译
太耗时,发布流程太慢等问题困扰着开发团队。
SOA的问世促使系统架构发生了跨越式的演变,它提出了面向服务的架构思想,将系统拆分成多个服务组件,并通过
ESB(企业服务总线)对服务组件进行统一管理,但重量级的ESB使得自身又成为了一个瓶颈。随之而来的是近来业界流行的
微服务架构,它将SOA的思想进一步升级,将系统组件化、服务化以及去中心化,强调 轻量级、松耦合、服务自治、独立部
署。
微服务架构解决了单体应用的痛点,打破了SOA的瓶颈,同时也带来了很多的复杂性。部署运维方面,服务的部署、管理、
监控。开发设计方面,服务的拆分、设计、编码、测试都将会变得复杂。幸运的是,容器化技术(比如无比流行的Docker)
已经很大程度上帮助我们克服了环境的差异性,而一些容器编排工具诸如Kubernetes, Rancher, Docker-compose 提供了容器
部署管理的解决方案。作为行业的领航者,ThoughtWorks也在极力倡导 开发、设计、部署、运维一体化 的DEVOPS文化理
念,并通过丰富的咨询和交付成果来帮助企业研发团队更好地实施微服务架构的开发。
那么在编码测试方面,又有什么新招来保证微服务架构下系统的质量?
单体应用测试实践
当我们的意识中只存在一样东西的时候,我们便可以不假思索的拿来就用。
在单体时代,对于开发-测试-部署,业界已经具备了一套很成熟的解决方案。基于这种方案,当一个敏捷开发的小Team开始
构建一个应用之前,CI搭建的过程也会变得非常简单:CI只需要从一个代码库中去pull代码,然后编译-测试-部署,它的流程
可以简化成:
在这种单线流水线模式下,如果团队的自动化实践做得很好,开发人员只需要关注自己编写代码时所编写的测试的质量和数
量。整个应用的测试策略简单直接:
保证足够的单元测试的覆盖率,保持一定数量的Servcie测试,添加一些重要业务流程的E2E测试。
微服务测试的演变
微服务架构是一种演进式架构,开发团队跟领域专家在一起进行业务分析(Event Storming),从而划分出独立的服务,系统
一开始确定为独立服务的数量可能是几个,伴随着业务的复杂深入,会不断地衍生出新的服务。下图是一个包含了四个服务的
微服务架构的系统: