携程微服务架构下的测试浅谈

栏目: 服务器 · 发布时间: 6年前

内容简介:施赛花,携程机票BU测试工程师,主要负责携程机票聚合层服务的测试,以及自动化工具的开发。善于研究新技术,并转用于实践,提升测试工作效率。

作者简介

施赛花,携程机票BU测试工程师,主要负责携程机票聚合层服务的测试,以及自动化 工具 的开发。善于研究新技术,并转用于实践,提升测试工作效率。

一、前言

在现在这个互联网时代,多变的市场环境以及日益增长的客户需求,加速了产品的迭代和更新。传统的单体式应用已经因跟不上发展的步伐而逐渐退出历史的舞台,取而代之的是SOA的问世。

SOA的出现使系统架构发生了跳跃式的转变,它提出了面向服务的设计思想。而现今流行的微服务架构,和SOA虽是一脉相承,但不再强调传统SOA架构里的ESB(企业服务总线)。

使用微服务架构可以将系统划分成更细粒度的服务,每个微小服务实现单一业务功能,且可以根据自身特点选择更适用的编程语言和技术。每个微服务可以由不同的团队独立完成开发,互不影响,加速了产品的推出和迭代。

夸张一点说, 如果将整个软件系统比作宇宙的话,那每个微服务就好比行星,它可以独立的运行在自己的进程中。 各服务之间通过网络通信,看似独立,却又因业务联系关联在了一起,就像各个行星之间有着引力等物质将它们紧紧关联。一系列独立运行的微服务就共同构建起了整个系统。

二、微服务架构下测试的分类

以传统建筑行业为例,项目的完成需要设计院、施工方和监理单位协同合作。类比到软件系统中,架构师、开发和测试也是缺一不可。 微服务架构下,更要求采用的测试策略能够为服务内部的完整性,以及每个服务之间的交互,提供全面的测试覆盖。

相比于常见的UI测试层、接口测试层、单元测试层,三层测试金字塔,在微服务架构,这个分类可以被扩展为5类。

下面将逐一介绍在微服务架构中主要采用的测试类型:

  • 单元测试

单元测试是针对代码单元的测试,通常只测试一个函数和方法调用,验证其运行结果是否符合预期,是对代码质量最快速的反馈。高覆盖率、高质量的单元测试是保障代码质量的第一道保护伞。在掌握TDD(Test-Driven Design,测试驱动开发)的前提下,单元测试更是对代码重构起到了非常关键的作用。

  • 集成测试

虽然单独测试模块非常重要,但是测试各个模块之间交互是否正常,同样也占据了重要的地位。在微服务架构下,集成测试的目的是把一些子模块组合在一起,测试其作为子系统是否存在缺陷,检查模块之间的通信和交互是否通畅且准确,是否以预期的方式协作。

  • 组件测试

在微服务架构中,组件实际上就代表着微服务本身,所以组件测试就是检查服务内部功能实现是否完整,内部逻辑是否正确,异常处理是否正常等。

  • 契约测试

契约测试称之为消费者驱动的契约(Consumer-Driven Contracts,简称CDC)测试。契约测试是为了测试服务之间连接的正确性,测试服务能否符合契约预期,即是否能真正满足服务消费者的需求。

  • 端到端测试

端到端测试是从UI层开始执行,目的是检查整个软件系统是否符合用户的预期需求。一个常规页面功能展示的背后往往涉及多个服务,所以运行端到端测试需要部署多个服务。这样的测试能够达到更广的覆盖面,但是也面临测试不稳定,定位问题难等问题。

在微服务架构下,前端及后端各微服务之间都是分开研发及测试。 保证每个微服务本身的质量成了测试中至关重要的一环。 要想楼房造的高而稳,那基础必须扎实。微服务就好比那基石,高质量的微服务,是保障软件系统整体质量的关键。

相较于端到端测试在敏捷开发中的维护成本,服务在迭代研发过程中,和UI相比变化相对少,所以自动化更易维护,且能在迭代中不断复用。而且,服务测试自动化受外界因素的影响较少,不会受浏览器、手机型号及系统版本等影响。

三、基于微服务架构的服务测试工具

微服务架构带来了便利,随之也给测试工作增加了难度和新的挑战。测试人员必须跟上时代的步伐,调整自己的测试方法和工具。

怎样模拟多样的上层数据以及稳定的下层服务,高效、高覆盖的完成对服务的测试。此时,携程基于微服务架构的自动化比对工具就应运而生了。

该比对工具是 以生产Log作为测试数据源,通过Mock、缓存等实现生产流量在测试环境的回放,以达到对服务进行全面测试的目的。

1 、设计初衷

1)缩减测试数据维护成本、增加测试覆盖度

因是对服务的测试,首先要做的就是模拟上层应用或系统调用被测服务。常规服务测试自动化中,测试数据都是由自动化来完成构建,痛点:数据维护成本高,Case量级偏少。

解决方案:

拉取生产的Log数据作为数据源,这样原来5%左右测试数据的维护成本就缩减为了0%。数据每天定时拉取,增加了数据的新鲜度。且拉取的数据量大,这样就能保障数据的多样性,丰富的测试场景,以达到增加覆盖度的目的。

2)测试用例的持续运行成功

因测试环境的不稳定性,以及测试环境数据的缺失,且对于下层服务返回数据的强依赖性,做到Case持续运行成功并不是一件容易的事。

解决方案:

通过实现Mock,摆脱对底层服务的依赖,且能高效还原当前Case在生产环境的测试场景。

3)实现对被测服务所有输入输出流的验证

很多时候被测试的服务内部需要去调用其他服务,且有非常复杂的逻辑判断,对调用其他服务这块中间输出流的验证也是非常重要的,所以常规只对服务返回结果的验证远远不够。

解决方案:

实现对被测试服务所有输入输出流的比对验证。

2 、具体实现

比对工具中最关键的是实现两个服务:

  • 比对服务:负责测试数据的拉取、被测服务的调用以及最后的比对;

  • Mock服务:负责被测服务需要的返回结果的高效匹配,以及对调用其他服务请求报文的收集及缓存。

比对工具工作流图:

携程微服务架构下的测试浅谈

3 、工具优势

  • 仿真生产流量

通过实现多线程,对生产上高QPS的服务,能够高效还原生产流量场景,并且通过模拟生产高并发时被测服务的负载量,使原本还有藏身之所的Bug更无所遁形。同时,每次运行Case的时间也有了量级上了缩减。

  • 灵活Mock下层服务

以携程机票一个聚合层服务为例,它需要调用超过30个下层服务,常规测试用的打桩服务需要对指定下层服务进行预设返回,在多线程的情况下,这种方式匹配效率较低且容易出错。我们Mock服务中对打桩功能进行了改良,不仅摆脱对指定服务的Mock,并能快速准确的匹配返回结果。

  • 多种比对方式

工具除支持两个测试环境进行比对外,更支持直接与生产数据比对。不同的比对方式,满足更多的测试需求,且对于被测服务中已知有变化的节点,也支持除外不比较,大大缩减测试结果的分析时间。

四、总

技术的发展不会停步,学习的脚步不会停止。在微服务架构下,除了对微服务技术本身的研究外,对更适用于微服务架构测试的探究,是每个测试人未来努力发展的方向。

【推荐阅读】

携程微服务架构下的测试浅谈


以上所述就是小编给大家介绍的《携程微服务架构下的测试浅谈》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

我用微软改变世界

我用微软改变世界

保罗·艾伦 / 吴果锦 / 浙江人民出版社 / 2012-3 / 46.00元

《我用微软改变世界(微软联合创始人保罗•艾伦回忆录)》内容简介:1975年,两个从大学退学的男孩夜以继日地设计一款软件。其中一个男孩就是后来的世界首富比尔盖茨,而另外一个则作为盖茨背后的男人,一直生活在盖茨的阴影里,其实,他的人生经历远比盖茨更为传奇和丰富。 16岁,与比尔盖茨在顶级名校湖畔中学相遇,成为最佳拍档,无数趣事,无数闹腾,高呼“处男万岁”还不够,还得意扬扬把这话刻在碑上留给学弟们......一起来看看 《我用微软改变世界》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具