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

一、背景

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

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

2.1 传统的 API 测试策略

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

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

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

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

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

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

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

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

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

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

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 ------

作者简介

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

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

  1. 微服务模式下,实现前后端多资源服务调用

    Micro Services 首先,我先解释下,文章标题的意思: 咋看起来特别像是一个标题党????,可能是我没想好怎么表达,其实白话文就是:在微服务场景下,肯定会有很多子服务API,那多个前端项目如 ...

  2. 微服务模式下API测试

    来自茹炳晟 session和cookie的区别 如果后端工程师使用 session 记录使用者登入信息,那么后端通常会传一个 session ID 给前端.之后,前端在发给后端的 requests 的 ...

  3. 技术分享 | 混合云模式下SaaS端前端最佳实践

    导读:集成开放平台采用的是混合云部署架构,包含两个大的组件,管理控制台和引擎.管理控制台是SaaS的,部署在公有云,按租户隔离.引擎部署在客户私有云.一套SaaS版的管理控制台如何适配不同客户的引擎, ...

  4. 架构设计:微服务模式下,实现灰度发布模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.基本逻辑 请求通过8001服务,在灰度规则中,会读取下次请求的服务列表,根据版本号参数规则,选中路由的服务. 配置版本号,区分灰度版本和默 ...

  5. 问题 seata_架构设计 | 基于Seata中间件,微服务模式下事务管理

    一.Seata简介 1.Seata组件 Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata将为用户提供了AT.TCC.SAGA.XA事务模式,为用户打造一 ...

  6. druid seata 配置_架构设计 | 基于Seata中间件,微服务模式下事务管理

    一.Seata简介 1.Seata组件 Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata将为用户提供了AT.TCC.SAGA.XA事务模式,为用户打造一 ...

  7. 架构设计 | 基于Seata中间件,微服务模式下事务管理

    源码地址:GitHub·点这里 || GitEE·点这里 一.Seata简介 1.Seata组件 Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata将为用 ...

  8. 【华为云技术分享】HDC.Cloud|华为云Stack大咖说:如何实现微服务架构下的分布式事务

    离华为开发者大会2020(Cloud)开幕仅剩一月左右,让开发者们和华为大咖近距离沟通的扫地僧早午餐会也已经开放预约.但是,有些小伙伴们已经等不及到二月了,别急,福利这不就来了吗!华为云Stack混合 ...

  9. TOP100summit:【分享实录-华为】微服务场景下的性能提升最佳实践

    本篇文章内容来自2016年TOP100summit华为架构部资深架构师王启军的案例分享. 编辑:Cynthia 王启军:华为架构部资深架构师.负责华为的云化.微服务架构推进落地,前后参与了华为手机祥云 ...

最新文章

  1. LeetCode Search Insert Position (二分查找)
  2. Storm的通信机制
  3. python-格化输出format方法
  4. Spring :读取配置文件(.properties、.yam)相关注解
  5. sql聚集索引和非聚集索引_SQL Server中非聚集索引概述
  6. mysql语句优化 explai_mysql使用explain优化sql语句
  7. 一位算法工程师从30+场秋招面试中总结出的超强面经—文本检测与GAN篇(含答案)...
  8. 韩顺平 java笔记 第8讲 this 类变量 第9讲 类方法
  9. office提示 Excel 4.0函数以定义名称保存
  10. 【深入理解Java原理】ThreadLocal
  11. ABBYY FineReader 超强OCR识别软件 V15.0.0 特别版
  12. 实部和虚部高斯变量瑞利衰落matlab,瑞利信道仿真
  13. Java随机产生中文昵称
  14. 【转载文章】原 DOS命令学习(从入门到精通)_____附加自己学习笔记
  15. PPT中的图像如何导出不失真的矢量图
  16. vue实现画出页面二维码的3种办法
  17. java 二进制报文头_使用Netty收发二进制报文问题记
  18. php中奖概率算法,刮刮卡/大转盘抽奖算法
  19. C语言判断完全平方数(经典代码)
  20. C语言中指针*p、p以及p之间的区别以及*p和**p的区别

热门文章

  1. Jedis 设置key的超时时间
  2. Linux下java -version版本不对
  3. nginx+tomcat8+memcached实现session共享具体操作
  4. java 文件上传至oracle blob字段 实现
  5. Android 中文api (81)——InputMethod [输入法]
  6. 大文件及文件夹上传(续)
  7. php 解析xml 的四种方法(转)
  8. 高质量的期货研究报告去哪里找?
  9. pl/sql查询表数据,报错ORA-03115:不支持的网络数据类型或表示法
  10. 1-3.监督学习(supervised learning)