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

4个实用的微服务测试策略

微服务架构并不是一种新的架构模式,但它的不断发展为那些寻求企业级私有云解决方案的公司,带来了诸多好处,将大型一体化架构应用拆分为可组合的微服务,赋予企业独立扩展和维护每个组件的能力以及DevOps能力。

当然,微服务架构的分布式和独立性也带了许多挑战,而本文讲谈谈如何克服测试多个可独立部署组件时可能会遇到的挑战。

单元测试(Unit Testing)

单元测试的范围可以是一组服务(社会性单元测试),也可以是单独的一个服务(独立单元测试)。被测试的单元粒度越小,就越容易确定模块的行为、查明相关collaborators以及对象与依赖之间的交互。由于单元的复杂度较低,QA工程师可以通过单元测试策略来评估单元是否与collaborators隔离。社会性单元测试和独立单元测试经常会在同一个代码库中同时进行,以解决不同的测试问题。

测试domain layer的目的是模拟DML语句并证明所有collaborators都以正确的顺序使用真实的domain objects。在单元测试期间,工程师可以验证用于生成map responses的逻辑或来自外部远程依赖项的其他请求。就资源和服务层而言,验证每个组件是否与collaborators正确交互,将可以可重复且一致的方式监视请求/响应周期。

集成测试(Integration Testing)

集成测试在分段环境中进行,以在分析通信路径的功能和它们之间的交互之后集成各个服务。与单片或SOA不同,微服务架构依赖于进程间通信(IPC)机制来正常运行,这就是为什么必须验证服务之间的交互。

我们需要编写自动化测试,以通过与外部服务和数据存储的集成来映射成功或错误的情况。运行网关集成测试将在协议级别上破坏接口错误,例如不正确的SSL处理和丢失的HTTP标头。持久性集成测试确保每个组件和协议客户端必须在超时和部分失败的情况下作为外部依赖进行响应。

契约测试(Contract Testing)

契约测试是一种用于验证外部服务调用与其API Provider endpoint之间契约的黑盒子。一般有两种契约测试:

  • 集成契约测试
  • 消费者驱动(consumer-driven)契约测试

在集成契约测试中,每个组件都需要独立调用,并且必须满足消费服务(consumer)预期的契约协议。解决这个问题的最佳方法是对double进行测试。另一方面,定期运行一组单独的测试以确认测试double没有变化至关重要。不过,一单出现测试失败,会降低部署管道的速度并破坏IT基础架构或分布式系统的功能。处理间歇性测试失败的最佳方法之一是更新测试double,同时可能也需要更新代码,以便可以使其恢复到与外部服务一致的状态。

在消费者驱动的契约测试中,消费者将描述他们想要使用服务的方式。消费者契约可以在生产者和消费者之间以相互同意的语言和模式进行。服务提供商将针对各个契约的副本测试服务,然后对该特定服务进行更改,而不会影响其他服务的性质。

End-to-End测试(End-to-End Testing)

End-to-End(E2E)测试用于确定整个系统正常运行以及网络基础设施(负载平衡器、防火墙等)已正确配置。End-to-End测试需要以最精细的粒度运行以测试整个系统的功能。在此,QA工程师验证完全集成过程的行为,并确保系统总体上满足其业务需求,而不管使用的服务组件体系结构如何。在功能测试的帮助下,开发人员可以确定集成系统或应用是否按要求的规定运行。

关于Rainbond

当下,已经有很大一部分公司完成了单体架构向微服务架构的迁移改造,并在疲于应对大量微服务间通信问题时,开始考虑采用Service Mesh微服务架构作为服务与服务直接通信的透明化管理框架,以插件式的方式实现各种业务所需的高级管理功能。

而开源PaaS Rainbond提供了开箱即用的Service Mesh微服务架构,部署在Rainbond上的应用原生即是Service Mesh微服务架构应用。

  • Rainbond项目网站
  • 试用Rainbond公有云

    • 注册或使用Demo账号/密码登录:rainbond-demo/rainbond-demo
  • Github
  • 码云
  • 文档
  • 微信群: 添加微信“zqg5258423”并接受邀请入群

相关文章:

  • float,double和decimal类型
  • iOS:高仿闲鱼、京东等列表底部分页视图
  • 使用MDI 和 XtraTabbedMdiManager 后 选项卡切换后Ribbon 合并后不选中MDI子窗...
  • java~springboot~ibatis Invalid bound statement (not found)原因
  • c#正则表达式
  • 解码 | 25 分钟开发分布式架构的转账小程序
  • 删除2018年以前的文件
  • UTF-8编码规则
  • Java 实现阿里云短信
  • Slog80_打包ArthurSlogMarkdownEditor编辑器至mac平台dmg安装包GET!
  • 一个网站同时监听两个端口
  • DataSet数据转换string字符串
  • Android 各种路径详细说明
  • 【SQL Server DBA】日常巡检1:数据库空间、状态、使用的监控
  • Java并发编程之Java CAS操作
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 3.7、@ResponseBody 和 @RestController
  • 345-反转字符串中的元音字母
  • ERLANG 网工修炼笔记 ---- UDP
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Java 最常见的 200+ 面试题:面试必备
  • Netty源码解析1-Buffer
  • node和express搭建代理服务器(源码)
  • uva 10370 Above Average
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 包装类对象
  • 程序员最讨厌的9句话,你可有补充?
  • 从零开始学习部署
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 入手阿里云新服务器的部署NODE
  • No resource identifier found for attribute,RxJava之zip操作符
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # 达梦数据库知识点
  • #预处理和函数的对比以及条件编译
  • $L^p$ 调和函数恒为零
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (二)springcloud实战之config配置中心
  • (翻译)terry crowley: 写给程序员
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)德国人的记事本
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net mvc部分视图
  • .NET 中的轻量级线程安全
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .sdf和.msp文件读取
  • /var/spool/postfix/maildrop 下有大量文件
  • @JSONField或@JsonProperty注解使用
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [Big Data - Kafka] kafka学习笔记:知识点整理