当前位置: 首页 > news >正文

24 | 紧跟时代步伐:微服务模式下API测试要怎么做?

微服务架构(Microservice Architecture)

        微服务是一种架构风格。在微服务架构下,一个大型复杂软件系统不再由一个单体组成,而是由一系列相互独立的微服务组成。其中,各个微服务运行在自己的进程中,开发和部署都没有依赖。

微服务架构具有以下特点:

  •         每个服务运行在其独立的进程中,开发采用的技术栈也是独立的;
  •         服务间采用轻量级通信机制进行沟通,通常是基于 HTTP 协议的 RESTful API;
  •         每个服务都围绕着具体的业务进行构建,并且能够被独立开发、独立部署、独立发布;
  •         对运维提出了非常高的要求,促进了 CI/CD 的发展与落地。

微服务架构测试挑战

        微服务之间的耦合关系

        假定我们的被测对象是 Service T,但是 Service T 的内部又调用了 Service X 和 Service Y。此时,如果 Service X 和 Service Y 由于各种原因处于不可用的状态,那么此时就无法对 Service T 进行完整的测试。

        解耦的方式通常就是实现 Mock Service 来代替被依赖的真实 Service。实现这个 Mock Service 的关键点就是要能够模拟真实 Service 的 Request 和 Response。 

基于消费者契约的 API 测试

        下图中 Service T 是被测试对象,进一步假定 Service T 的消费者(也就是使用者)一共有两个,分别是 Service A 和 Service B。

        Service T 可以对外提供的服务的契约,所以我们把这个测试用例的集合称为“基于消费者契约的 API 测试”。

收集消费者契约的逻辑原理

         在 Service T 前放置一个代理,所有进出 Service T 的 Request 和 Response 都会经过这个代理,并被记录成 JSON 文件,也就构成了 Service T 的契约。

        微服务架构中往往会存在一个叫作 API Gateway 的组件,用于记录所有 API 之间相互调用关系的日志,我们可以通过解析 API Gateway 的日志分析得到每个 Service 的契约。但是API Gateway 只有面向客户端的服务才会有这一层。内部调用主要靠splunk来获取。

微服务测试的依赖解耦和 Mock Service

        实现 Mock Service 的关键,就是要能够模拟被替代 Service 的 Request 和 Response。

        契约的本质就是 Request 和 Response 的组合,具体的表现形式往往是 JSON 文件,此时我们就可以用该契约的 JSON 文件作为 Mock Service 的依据,也就是在收到什么 Request 的时候应该回复什么 Response。

        如下图,当用 Service X 的契约启动 Mock Service X 后,原本真实的 Service X 将被 Mock Service X 替代,也就解耦了服务之间的依赖

 

http://www.lryc.cn/news/140039.html

相关文章:

  • 【论文阅读】POIROT:关联攻击行为与内核审计记录以寻找网络威胁(CCS-2019)
  • K8S cluster with multi-masters on Azure VM
  • 初阶c语言:趣味扫雷游戏
  • JVM——内存模型
  • java八股文面试[JVM]——元空间
  • 科技云报道:云计算下半场,公有云市场生变,私有云风景独好
  • Oracle 如何给大表添加带有默认值的字段
  • 记录Taro大坑2丢失api无法启动
  • Java-Maven-解决maven deploy时报 401 Reason Phrase Unauthorized 错误
  • 【数据结构】 栈(Stack)的应用场景
  • 人力资源小程序的设计原则与实现方法
  • 检查Javascript对象数组中是否存在对象值,如果没有向数组添加新对象
  • UG\NX二次开发 使用录制功能录制操作记录时,如何设置默认的开发语言?
  • 【业务功能篇83】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-应用层实战
  • VBJSON报错:缺少:语句结束
  • Docker安装ES+kibana8.9.1
  • 12. Oracle中case when详解
  • 【电路设计】220V AC转低压DC电路概述
  • 网络地址转换NAT-动态NAT的使用范围和配置-思科EI,华为数通
  • 远程连接虚拟机中ubuntu报错:Network error:Connection refused
  • 快速排序三种思路详解!
  • 【二叉树入门指南】链式结构的实现
  • 【位运算】算法实战
  • C++构建系统
  • “深入探索JVM内部机制:理解Java虚拟机的运行原理“
  • java八股文面试[JVM]——双亲委派模型
  • NLP与大模型主题全国师资培训班落地,飞桨持续赋能AI人才培养
  • Jupyter Notebook 配置根目录
  • 算法 位运算
  • Linux 虚拟机常用命令