技术分享 | 微服务模式下如何高效进行API测试

6d9ad816131923a0bb1f8e52d912533d.png

87b7920cdf276e8a62db1cdf80c3ca95.png

导读:微服务架构下,API 测试的最大挑战来自于庞大的测试用例数量,以及微服务之间的相互耦合。基于这种挑战,如何进行高效的API测试,选择什么样的方式就比较重要,此文主要是采用契约测试的方法来对微服务模式下的API测试做简要的阐述。

一、背景

集成开放平台由1个云端管理中心+N个后台服务组成(连接中心、接口中心等),云端管理中心与后台服务存在1对多的API调用关系,而服务与服务间也存在多对多的API调用关系。如何高效精准的保障这些接口调用稳定,结合行业内接口测试方法和微服务模式下的接口测试,我们总结了一套集成开放平台的API测试方法:契约测试。

3bbcd7e5052cba44fe7675df82838ed4.png

二、契约测试与传统API测试的不同

2.1 传统的 API 测试策略

在传统的 API 测试中,我们的测试策略通常是:

1. 根据被测 API 输入参数的各种组合调用 API,并验证相关结果的正确性;
2. 衡量上述测试过程的代码覆盖率;
3. 根据代码覆盖率进一步找出遗漏的测试用例;
4. 以代码覆盖率达标作为 API 测试成功完成的标志。

2.2 基于消费者契约的 API 测试(后面简称契约测试)

而服务拆分之后,API 接口数量将成倍增加,此时需要找到一种既能保证 API 质量,又能减少测试用例数量的测试策略。即基于消费者契约的 API 测试。
如下图,基于消费者契约的 API 测试的核心思想是:只测试那些真正被实际使用到的 API 调用,如果没有被使用到的,就不去测试。
2dbc698551dd388ec88797538086ebef.png

看上图大家可能对契约测试还是比较模糊,下面我举个实例进行详细讲解。

案例:连接中心提供了创建连接的API给云端管理中心,我们需要对创建连接的API进行接口测试。

传统的接口用例设计如下:

5df018370c269eaa459e62d0b416cd45.png

2.3 契约测试的用例设计如下:

128309dc65841b8ea865bd71c440ee42.png

从上面两幅图可以清晰的看出,契约测试抛弃了异常场景的验证,契约模式下,传参可定是合法的。

从上面两幅图可以清晰的看出。契约测试做了如下改变:

1.抛弃了异常场景的验证,契约下,传参肯定是合法的。不需要额外进行验证。

2.对接口提供方的业务逻辑做了场景合并处理,不关注里面的业务逻辑,重在验证契约的功能是否正常。

2.4 契约测试、单元测试、接口测试区别

API测试和单元测试,更强调的是覆盖API内部逻辑。

契约测试,更强调是组件之间连接的正确性,除了保证组件内部,还要保证组件间的调用是正确的,也就是服务API之间的调用。

单元测试单元测试针对代码单元(通常是类)的测试,单元测试的价值在于能提供最快的反馈。另外好的单元测试还可以帮助你改善设计,在你的团队掌握TDD的前提下,单元测试能辅助重构,帮助改善代码整洁度。
API测试API测试是针对业务接口进行的测试,主要测内部接口功能实现是否完整,比如说内部逻辑是不是正常,异常处理是不是正确。
契约测试契约测试其实是为了测试服务之间连接或者说接口调用的正确性,为了验证服务提供者的功能是不是真正能够满足消费者的需求。它其实体现了测试前移的思想,把本来要通过集成测试才能验证的工作化作单元测试和接口测试,用更轻量的方式快速进行验证。关注点是consumer是否可以正确的消费provider的API,这里的"消费"包括调用接口和解析数据。它的被测对象,注意,一定是consumer。
集成测试它从用户的角度验证整个功能的正确性,测的是端到端的流程,并且加入用户场景和数据,验证整个过程是不是OK,它的价值业务价值最高,是验证一个完整的流程。


2.5 契约测试带来的好处

降低服务集成的难度,把服务集成这个过程分解成了单元测试和接口测试来做,它从消费者的需求为出发点,把消费者的需求作为你的测试用例驱动出一份契约,然后验证提供者端的功能。

通过使用契约测试,接口调用双方协商接口后就可以并行开发,并且在开发过程中就利用契约进行预集成测试,不用等到联调再来集成调通接口,一旦成熟,在保证质量的前提下,联调的成本可以减低到几乎为0。

三、总结及适用场景

契约测试相对传统接口测试来说,很大程度上缩减了测试场景,使测试更聚焦于客户实际应用场景。但是缺点也很明显,一旦消费者毁坏契约进行非法的参数调用时,就会导致生产者出现不可预知的异常,甚至会导致宕机的发生。为此我梳理一下适用的场景,请慎重选择。

场景描述

是否适用

1.微服务内部接口,不对外开放

2.微服务前后端调用接口,有指定身份认证

3.微服务间相互调用接口,不对外开放

4.微服务对外指定接口,有指定身份认证

5.微服务对外公开接口

×

6.微服务对外指定接口,涉及核心业务场景

×

------ END ------

作者简介

吴同学: 测试工程师,目前负责集成开放平台的测试工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292048.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

由CloudStack项目引起的ESXI嵌套虚拟化引起的二级虚拟机无法被访问

关于这个问题,主要以文字描述为主,最终解决方法其实就一个步骤。问题描述:某客户需要部署某企业的云平台,但是由于年前没有足够的物理机资源,所以提供的资源均为虚拟机,现在让我们做技术评估。其实观察整个…

美女的床真的好难爬......

1 地中海式茂密?▼2 阴着呐▼3 拜拜了您呐▼4 草莓从哪里来▼5 爷青结系列▼6 没点才艺还住不了酒店了▼7 美女的床果真很难爬(真从500平大床中醒来)▼8 数学能有多有趣▼你点的每个赞,我都认真当成了喜欢

控制器方法错误处理

错误处理一直是开发维护阶段需要重点关注的一块,控制器中方法原则上都需要处理错误。 1、添加BaseController 路径:nweb\src\main\java\com\nankang\cati\nweb\controller\BaseController.java 所有的控制器都继承BaseController 2、使用: 1&…

EF Core 6 新功能汇总(一)

在这篇文章中,你将看到 EF Core 6 中的十个新功能,包括新的特性标注,对时态表、稀疏列的支持,以及其他新功能。1Unicode 特性在 EF Core 6.0 中,新的 UnicodeAttribute 允许你将一个字符串属性映射到一个非 Unicode 列…

DS5020配置集群存储

一、方案设计 计划给某公司服务器制作集群,存储划分大致如下: 1、 将存储磁盘制作为raid5; 2、 划分两个Storage Partition给两类集群使用,一类为数据库服务,一类为各种应用服务 二、存储的连接 1、存储的简介 Serial …

RequireJS首次加载偶尔失败

现象:第一次加载JS文件,首次加载偶尔失败; 原因:require([jquery, operamasks, zTree, jQueryCookie],中前后引用同步加载; 解决方式:shim声明前置加载; 配置如下: requi…

linux之file命令总结

解释: file是通过查看文件的头部内容,来获取文件的类型使用file命令可以知道某个文件究竟是二进制(ELF格式)的可执行文件, 还是Shell Script文件,或者是其它的什么格式。 file能识别的文件类型:目录、Shel…

优化.NET 应用程序 CPU 和内存的11 个实践

https://michaelscodingspot.com/cpu-bound-memory-bound/优化.NET 应用程序 CPU 和内存的11 个实践凡事都有其限度,对吧?汽车只能开这么快,进程只能使用这么多内存,程序员只能喝这么多咖啡。我们的生产力受到资源的限制&#xff…

陈省身:三角形内角和不等于180°

全世界只有3.14 % 的人关注了爆炸吧知识三角形外角和为360作为公认的劳模,平日里,超模君不但要码字,工作之余还要监督表妹做作业,也难怪表妹成绩总是能名列前茅。今天表妹做作业时,遇到一道判断题:“三角形…

跟我学PHP第二篇- 配置Mysql以及PHP WampServer篇(1)

大家好,昨天我给大家介绍了如何去安装ZEND STUDIO,下面昨天文章的链接: http://www.cnblogs.com/kmsfan/p/zendStudio.html 本节为配置的第一部分,还没有讲完全部,因为个人工作比较忙,没有一整天时间写博客…

linux之查看文件大小和磁盘大小总结

1 、查看文件大小 使用du命令,查看该目录以及子目录文件的大小 du -h 如果只需要快速查看这个目录占用大小,可用下面命令 du -sh 比如我们查看xiaoyun这个文件大小 2、查看电脑磁盘大小 使用下面命令 df -h 效果如下图 很明显系统装载/dev/sda2下

YARP(Yet Another Reverse Proxy)是使用 .NET 构建的高度可定制的反向代理

点击上方蓝字关注我们(本文阅读时间:16分钟)YARP 1.0已经发布了,现在可以从 NuGet 下载。YARP(Yet Another Reverse Proxy)是使用 .NET 构建的高度可定制的反向代理。YARP 与其他反向代理的最大区别在于它是如何构建和…

电影院里为何有散落的青瓜?

1 摄像头:你套个袋子我就认不出来了吗?▼2 路边惊现大熊猫!(素材来源网络,侵删)▼3 好一个驼小姐(via.豆瓣社死小组满杯草莓)▼4 学弟的理解也不是无迹可寻▼5 台湾人过生日的方…

java中List、Map、Set、Collection、Stack、Queue等的使用

java中这几个东西是比较常用的,虽然我用的不多,也正是因为用的不多,所以我一直搞不清楚他们之间的具体用法以及相互之间的关系,现在特单独作为一个东西来总结一下。 本文参考一下资料: 1.《java编程思想》一书第11章 2…

开发文档模板_需求文档模板一堆什么样的适合你呢?

产品经理的日常中用的最多的是产品需求文档,这个文档应该可以说是产品经理将需求落到是明面上的一步。我们的文档需要给相关的人员进行共同的看,不然文档就没有存在的意义了,文档不只是简单的线框图和一些自己也看不明白的词汇。实际中很少开…

Briefly unavailable for scheduled maintenance message after doing automatic upgrade

为什么80%的码农都做不了架构师?>>> 今天突然不能打开wordpress,报了“Briefly unavailable for scheduled maintenance message after doing automatic upgrade” 这个错误,一下懵逼了。 Google之后,发现是wordpress…

搞IT的技术人员为什么会如此苦逼

http://www.cnblogs.com/springmvc-hibernate/archive/2012/05/10/2493733.html —————————————————————————————————————————————————————— 为什么苦逼? 原因一大堆,对于外部的因数,我…

为什么越来越多的开发者选择使用Spring Boot

Web应用开发背景 使用Java做Web应用开发已经有近20年的历史了,从最初的Servlet1.0一步步演化到现在如此多的框架,库以及整个生态系统。经过这么长时间的发展,Java作为一个成熟的语言,也演化出了非常成熟的生态系统,这…

【Blog.Core开源】快速预览Admin界面效果

( 半盏屠苏犹未举,灯前小草写桃符 )书接上文《【Blog.Core开源】开发插件,给Swagger加权》,在上篇文章中,我们给项目的接口文档增加了一个控制界面,可以输入用户名密码,这样也算是简单的一个加密控制了&…