微服务测试实践之测试分析

微服务特点

首先微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终服务。每个服务运行在其独立的进程中,服务与服务间采用各种协议通信,例如我厂使用华为DSF微服务架构的DSF协议。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、仿真环境、测试环境等。

每个服务都可以被独立部署意味着随着服务数量及调用关系复杂度的增加,如果依然使用传统的集成测试方式对服务协作进行验证,必然会面临成本呈指数级增长的挑战。具体体现在:

1.验证成本高 为了验证多个服务协作后的功能正确与否,需要为每个服务搭建基础设施(包括其依赖的数据库、缓存等),并执行部署、配置等步骤,以确保服务能正确运行。

2.结果不稳定 微服务构建的系统本质上是分布式系统,服务间通信通常都是跨网络调用的。当对服务间协作进行测试时,网络延迟、超时、带宽等因素都会影响到测试结果,极易导致结果不稳定。

3.反馈周期长 相比于传统的单体应用,微服务架构下的可独立部署单元多,因此集成测试的反馈周期比传统的方式更长,定位问题所花费的时间也更长。

微服务测试理论

          相比于常见的三层测试金字塔,在微服务场景下,这个层次可以被扩展为5层(如果将UI测试单独抽取出来,可以分为六层)。分别为单元测试、集成测试、组件测试、契约测试、端到端测试。


来源网络


和测试金字塔的基本原则相同:

1.越往上,越接近业务/最终用户;越往下,越接近开发

2.越往上,测试用例越少

3.越往上,测试成本越高(越耗时,失败时的信息越模糊,越难跟踪)

单元测试

单元测试,即每个微服务内部,对于领域对象和领域逻辑的测试。它的隔离性比较高,去除其他依赖,执行速度较快。它和其他组件原则上没有依赖。即使要测试的对象对其他类有依赖,我们会Stub/Mock的手段来将这些依赖消除,比如使用mockito/PowerMock

集成测试

系统内模块(一个模块对其周边的依赖项)间的集成,系统间的集成都可以归类为集成测试。比如数据库访问模块与数据库的集成和外部service依赖的测试。

集成测试强调模块和外部的交互的验证,在集成测试时,通常会涉及到外部的组件,比如数据库和第三方服务。这时候需要尽可能真实的模拟实现与外部组件进行交互,比如使用和真实环境相同类型的数据库。

组件测试

贯穿应用层和领域层的测试。不过通常来说,这部分的测试不会访问真实的外部数据源,而是使用同schema的内存数据库,而且对外部service的访问也会使用Mock的方式。

契约测试

在微服务场景中,服务之间会有很多依赖关系。根据消费者驱动契约,我们可以将服务分为消费者端和生产者端,通常消费者自己会定义需要的数据格式以及交互细节,并生成一个契约文件。然后生产者根据自己的契约来实现自己的逻辑,并在持续集成环境中持续验证。有兴趣研究下Pact框架。

端到端测试

端到端测试是整个微服务测试中最困难的,一个完整的环境的创建于维护可能需要花费很大的经历,特别是当有多个不同的团队在独立开发的场景下。另一方面,从传统的测试金字塔来看,端到端测试应该覆盖那些业务价值最高的Happy Path。也就是说,端到端测试并不关注异常场景,甚至大部分的业务场景都不考虑。在端到端测试中,最重要的反而不是测试本身,而是环境的自动化能力。实践docker为主的devops思想。

项目举例

XX项目为我厂使用微服务开发的一个产品类项目,系统调用关系图如下,项目开发实现了部分单元测试、联调与系统环境的人员集成测试和与外部系统的联调测试。

项目测试分析

单元测试

单元测试需要实现在每个工程模块中,开发人员编写测试代码,主要包括dao层、biz层和service层方法的测试,采用mock机制去除外部依赖、同时采用内存数据库也可以去除数据库依赖。

集成测试

通过集成测试来完成测试各个模块能否正确交互,并测试其作为子系统的交互性以查看接口的缺陷。

项目集成测试需要解决公有协议栈(http协议、webservice协议)和私有协议(dubbo协议、dsf协议)测试问题,对此使用工具列表如下:

http协议:postman   

webservice协议:soapui  

dubbo协议和dsf协议:自研发simulator系统 

压力测试

压力测试由测试部门发起,提供测试报告,主要技术是通过MockService桩服务实现微服务调用链各级服务的性能测试结果。

为满足项目需求开发了统一的微服务mock系统实现桩服务,测试设计如下图:

端到端测试

测试人员通过开发人员提供unifornt-web页面进行业务端到端测试,直接穿透后端众多服务获取测试结果验证测试是否正确,公司其他同事也在实现以docker为主的devops实践方案。

结束语

本文主要讨论了微服务测试关注点以及我厂服务化项目实践微服务测试的时间,一路走来还存在大量的坑,目前也在慢慢填。后续文章,我会持续描述如何具体落实微服务单元测试、接口集成测试和自动化测试,同时也会单独介绍微服务测试的自研发的测试工具simulator系统。敬请期待!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,333评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,812评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,016评论 0 246
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,293评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,650评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,788评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,003评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,741评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,462评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,681评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,168评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,528评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,169评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,119评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,846评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,719评论 2 274

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,103评论 18 139
  • 概念 生产就绪:如果一个应用程序或服务被证实可以处理生产环境的业务流量,那么它就被认为是生产就绪的。 混沌测试:在...
    zlup阅读 1,604评论 0 3
  • 微服务最近非常流行,各大互联网公司纷纷采用微服务架构体系,微服务架构模式正在为敏捷部署以及复杂企业应用实施提供巨大...
    Sting阅读 8,947评论 0 58
  • 摘要:本文中,我们将进一步理解微服务架构的核心要点和实现原理,为读者的实践提供微服务的设计模式,以期让微服务在读者...
    Java架构师Carl阅读 5,661评论 0 20
  • “微服务架构”这一术语在前几年横空出世,用于描述这样一种特定的软件设计方法,即以若干组可独立部署的服务的方式进行软...
    ThoughtWorks阅读 16,818评论 1 71