值得收藏的5种微服务测试策略~

【微服务】如何实现微服务集群的高可靠? 上篇文章中,我们讲解了微服务间的通信----Feign,之前也讲过了如何利用Eureka实现单服务节点的注册中心。但现实中,我们不可能使用单节点的服务注册中心,因为如果单节点宕掉了,那整个项目都会崩溃。所以需要构建高可用的服务注册中心,以增强系统的可用性。这篇文章我们来聊聊在微服务架构中,到底如何保证整套系统的高可用? 阅读详情

作者/ Tomas Fernandez

来源/翻译外网

微服务应用程序是一组通过网络进行通信的分布式程序,偶尔与第三方服务和数据库进行交互。与传统的单体相比,微服务的网络特性提供了更多的故障点。因此,我们需要一种不同的、更广泛的测试方法。

那么,我们如何测试一个微服务应用程序呢?测试金字塔仍然有效吗?当涉及第三方服务并且可能出现网络中断时,我们如何进行测试?我们将尝试在这篇文章中回答所有这些问题。

1

 测试微服务的挑战

微服务架构是一种如此深刻的范式转变,以至于我们必须重新考虑传统的测试技术。微服务在许多方面不同于经典的单体结构:

  • 分布式:微服务部署在多个服务器上,可能跨地理位置,增加延迟并使应用程序暴露于网络中断。依赖网络的测试可能会因为代码没有错误、中断CI/CD 管道和阻塞开发而失败。

  • 自治:只要不破坏 API 兼容性,开发团队可以随时自由地部署他们的微服务。

  • 增加测试区域:由于每个微服务都至少公开了一些 API 端点,因此有更多可测试的表面需要覆盖。

  • Polyglot:开发团队可以为他们的微服务选择最好的语言。在一个大系统中,我们不太可能找到一个适用于所有组件的单一测试框架。

  • 生产是一个移动的目标:因为微服务可以独立部署并由自治团队构建,所以需要额外的检查和边界来确保它们在部署时仍然能够正常运行。

所有这些特征都迫使我们思考新的测试策略。

2

 微服务的测试金字塔

测试金字塔是自动化软件测试的规划工具。在其传统形式中,金字塔使用三种类型的测试:

  • 单元测试

  • 集成测试

  • 端到端测试

微服务金字塔增加了两种新类型:组件测试和合约测试。

这是微服务测试金字塔的一个版本。在其他情况下,顺序可能会有所不同。有些可能包括集成层中的合同测试。事实是,金字塔更像是一个指导方针,而不是一成不变的东西。

让我们更详细地了解每个金字塔层的工作原理。

3

 微服务的单元测试

单元测试是最细粒度且数量众多的测试形式之一。一个单元由可以单独测试的类、方法或函数组成。单元测试是开发实践不可分割的一部分,如测试驱动开发或行为驱动开发。

与单体相比,微服务中的单元需要网络调用来实现其功能的可能性要高得多。发生这种情况时,我们可以让代码访问外部服务——接受一些延迟和不确定性——或者用测试替身替换调用,为我们提供两种处理微服务依赖关系的方法:

  • 单独的单元测试:当我们需要测试结果始终是确定性的时,应该使用它。我们使用模拟或存根将被测代码与外部依赖项隔离开来。

  • 社交单元测试:允许社交测试调用其他服务。在这种模式下,我们将测试的复杂性推入测试或暂存环境。社交测试不是确定性的,但是当它们通过时,我们可以对它们的结果更有信心。

我们可以使用test doubles 单独运行单元测试。或者,我们可以允许经过测试的代码调用其他微服务,在这种情况下,我们谈论的是社交测试。

正如您将看到的,平衡信心与稳定性将是贯穿整篇文章的主题。模拟使事情变得更快并减少了不确定性,但是你模拟的越多,你就越不能相信结果。社交测试尽管有缺点,但更现实。因此,您可能需要在这两种类型之间取得良好的平衡。

4

 微服务的合同测试

每当两个服务通过接口耦合时,就会形成契约。合约指定了所有可能的输入和输出及其数据结构和副作用。服务的消费者和生产者必须遵守合同中规定的规则才能进行通信。

合同测试确保微服务遵守他们的合同。他们没有彻底测试服务的行为;它们只确保输入和输出具有预期的特性,并且服务在可接受的时间和性能限制内执行。

根据服务之间的关系,契约测试可以由生产者、消费者或两者运行。

  • 消费者端合约测试由下游团队编写和执行。在测试期间,微服务连接到生产者服务的虚假或模拟版本,以检查它是否可以使用其 API。

  • 生产者端合约测试在上游服务中运行。这种类型的测试模拟客户端可以发出的各种 API 请求,验证生产者是否与合同匹配。生产者端测试让开发人员知道他们何时会破坏对消费者的兼容性。

合同测试可以在上游或下游运行。生产者测试检查服务没有实现会破坏依赖服务的更改。消费者测试针对上游生产者的模拟版本(不是真正的生产者服务)运行消费者端组件,以验证消费者可以发出请求并使用来自生产者的预期响应。我们可以使用 wiremock等工具来重现HTTP请求。

如果合约双方测试通过,则生产者和消费者是兼容的,应该能够通信。合同测试应始终在持续集成中运行,以在部署前检测不兼容性。

您可以在Pact 5 分钟入门指南中进行在线合同测试。Pact 是一个基于 HTTP 的测试工具,用于编写和运行基于消费者和生产者的合约测试。

5

 微服务的集成测试

微服务集成测试的工作方式与其他架构略有不同。目标是通过使微服务交互来识别接口缺陷。与合同测试总是模拟一侧不同,集成测试使用真实的服务。

集成测试对评估服务的行为或业务逻辑不感兴趣。相反,我们希望确保微服务可以相互通信以及它们自己的数据库。我们正在寻找诸如丢失 HTTP 标头和不匹配的请求/响应配对之类的问题。因此,集成测试通常在接口级别实现。

使用集成测试来检查微服务是否可以与其他服务、数据库和第三方端点进行通信。

6

 微服务的组件测试

组件是在更大的系统中完成一个角色的一个微服务或一组微服务。

组件测试是一种验收测试,我们通过用模拟资源或模拟替换服务来孤立地检查组件的行为。

组件测试比集成测试更彻底,因为它们经历了快乐和不快乐的路径——例如,组件如何响应模拟的网络中断或格式错误的请求。我们想知道组件是否满足其消费者的需求,就像我们在验收或端到端测试中所做的那样。

组件测试对一组微服务执行端到端测试。组件范围之外的服务会被模拟。

有两种执行组件测试的方法:进程内和进程外。

# 过程中组件测试

在这个组件测试的子类中,测试运行器与微服务存在于同一线程或进程中。我们以“离线测试模式”启动微服务,其中所有依赖项都被模拟,允许我们在没有网络的情况下运行测试。

与微服务在同一进程中运行的组件测试。该测试在适配器中注入一个模拟服务来模拟与其他组件的交互。

只有当组件是单个微服务时,进程内测试才有效。乍一看,组件测试看起来与端到端或验收测试非常相似。唯一的区别是组件测试选择系统的一部分(组件)并将其与其余部分隔离。该组件经过全面测试,以验证它是否执行其用户或消费者所需的功能。

组件和端到端测试可能看起来很相似。但不同之处在于,在类生产环境中端到端测试整个系统(所有微服务),而组件在整个系统的一个孤立部分上进行测试。两种类型的测试都从用户(或消费者)的角度检查系统的行为,遵循用户将执行的旅程。

我们可以使用任何语言或框架编写组件测试,但最流行的可能是Cucumber和Capybara。

# 进程外组件测试

进程外测试适用于任何规模的组件,包括由许多微服务组成的组件。在这种类型的测试中,组件被部署(未更改)在所有外部依赖项都被模拟或删除的测试环境中。

在这种类型的组件测试中,复杂性被推到测试环境中,这应该复制系统的其余部分。

7

 微服务中的端到端测试

到目前为止,我们已经对系统进行了零碎的测试。单元测试用于测试微服务的各个部分,合约测试涵盖 API 兼容性,集成测试检查网络调用,组件测试用于验证子系统的行为。只有在自动化测试金字塔的最顶端,我们才会测试整个系统。

端到端 (E2E) 测试可确保系统满足用户需求并实现其业务目标。E2E 套件应涵盖应用程序中的所有微服务,使用与用户相同的接口——通常结合 UI 和 API 测试。

应用程序应在尽可能接近生产的环境中运行。理想情况下,测试环境将包括应用程序通常需要的所有第三方服务,但有时,可以模拟这些服务以降低成本或防止滥用。

端到端是模拟用户交互的自动化测试。只能模拟外部第三方服务。

正如测试金字塔所描绘的,E2E 测试数量最少,这很好,因为它们通常最难运行和维护。只要我们关注用户的旅程和他们的需求,我们就可以通过少量的端到端测试来提取大量价值。

8

 结论

不同的范式需要改变策略。在微服务架构中进行测试比以往任何时候都更加重要,但我们需要调整我们的技术以适应新的开发模型。该系统不再由单个团队管理。相反,每个微服务所有者都必须尽自己的一份力量来确保应用程序作为一个整体运行。

一些组织可能认为单元、合同和组件测试就足够了。其他不满足于没有端到端和集成测试的人可能会选择建立一个 QA 团队来促进跨团队的测试覆盖。

电影推荐系统毕设实战:从ItemCF到微服务落地 推荐系统是信息过载时代的核心技术之一,其本质是通过用户行为与物品特征建模实现个性化匹配。原理上依赖协同过滤、内容分析与混合策略,在工程中需兼顾算法可解释性、数据闭环与服务可维护性。技术价值在于将稀疏行为数据转化为高相关性输出,支撑冷启动、长尾曝光等关键业务问题。典型应用场景涵盖视频平台、电商导购与内容资讯流。本文以真实MovieLens数据为基础,聚焦Spring Boot微服务架构下的ItemCF工程化实现,详解MovieService数据建模、RecommenderService算法落地及MovieRe 阅读详情

相关推荐

开发基于GDL235KBQ6开发板的IAP升级程序(HEX协议+串口空闲中断 + DMA接收数据)

使用GDL235kB开发板,实现串口iap升级程序的bootloader代码编写,app为led灯闪烁,并完成通信c代码

zhaozijuncc的博客 647

微服务测试

传统应用(基于单体架构开发的应用)的测试通常在开发完成后执行。传统的测试大多是手动执行,但存在手动测试效率极低、代价高等问题。使用微服务架构的一个关键动机是提高可测试性。但微服务架构的复杂性对测试提出了更多的挑战。......

云原生Java Web领域技术博客 2583

海思Hi3559A/CV100 DDR4参数配置经验分享

海思Hi3559A/CV100 DDR4参数配置方法 Hi3559AV100 DDR4 驱动配置说明 1.1 Hi3559AV100 DDR4 CLK/AC 驱动配置方法 寄存器地址 DDR PHY0:0x1206d0bc DDR PHY1:0x1206f0bc 寄存器描述 − Bit[5:3]:CLK 驱动 − Bit[14:12]:2T 驱动 − Bit[20:18]:1T 驱动 驱动大小定义 − 000:Disable − 001:240ohm − 010: 120ohm − 011:80ohm −

WeChat_zhanggong345的博客 2880

什么是微服务测试终于有人讲明白了

如今,信息化技术应用早已在社会生活的各个层面呈爆发式增长,从聊天、刷微博到打车、点外卖,这些应用场景的实现无不得益于其后端庞大系统服务的支持。而在这些后端系统中,微服务架构系统毫无疑问占据着绝对的数量优势,因为传统的单体架构系统不管是在业务上还是在性能上都难以承载我国巨大的信息消费市场的技术功能需求。无论是互联网行业的开疆拓土,还是银行保险等传统金融行业的科技化自我重塑,甚至是更宽、更广层面上的政企数字化转型,它们都将各自的上层建筑建立在以微服务架构系统为根基的信息系统之上。

伤心的辣条 1223

MOSFET开关损耗全面讲解:从原理到优化策略

深入剖析MOSFET开关损耗的产生机制,结合实际应用场景,讲解如何通过驱动设计和电路优化降低损耗,提升系统效率。重点关注mosfet在高频开关下的表现与热管理。

weixin_29476595的博客 1059

张正友标定法-MATLAB实验

该方法最早由微软研究院的Zhengyou Zhang教授提出,1998年发表在IEEE TRANSACTIONS ON PATTERNANALYSIS AND MACHINE INTELLIGENCE,论文题目为:AFlexible New Technique for Camera Calibration。 (一)标定平面到图像平面的单应性 单应性(homography):在计算机视觉中被定义

qq_37845624的博客 8290

微服务应用性能分析实战03 诊断利器:Java 性能分析神器 Alibaba Arthas

接下来,我会先介绍 Arthas 的学习路径,并结合具体场景,让你逐步认识 Arthas 的所有工具,并能在已知的场景中使用相应的工具,对线上问题打出组合拳。最后,我会分享我的落地经验,让 Arthas 提供的能力最大化。

fegus的博客 1170

别再只调IoU了!给YOLOv8换上NWDLoss,实测小目标检测精度提升明显

本文深入探讨了YOLOv8在小目标检测中的优化策略,重点介绍了NWDLoss(Normalized Wasserstein Distance Loss)的应用优势。通过对比实验证明,NWDLoss能有效解决传统IoU损失函数的局限性,显著提升小目标检测精度,在遥感影像和交通监控等场景中表现尤为突出。文章提供了详细的代码实现和训练技巧,帮助开发者快速集成这一先进技术。

weixin_29072299的博客 279

微服务测试怎么做,看看这篇文章就懂了

单元测试:测试服务的一小部分,例如类。组件测试:验证单个服务的行为。集成测试:通过测试服务的适配器来验证服务是否可以与基础设施服务(例如数据库和其他应用程序服务)进行交互。注意:某些版本的测试金字塔会切换组件测试和集成测试的顺序。端到端测试:验证整个应用程序的行为。结合多种微服务测试策略可以提高测试覆盖率和对软件的信心,同时也。

2401_83014899的博客 1427

Yocto系列讲解[入门篇] 1 - 快速入门熟悉Yocto的构建

yocto quick start up带大家快速上手

fulinux的博客 5万+

107.在 Vue 3 中使用 OpenLayers 实现视图联动功能

是一个非常强大的 Web 地图渲染库,支持多种地图数据格式和交互操作。在 Vue 3 中,我们可以利用。绑定到真实的 DOM 元素上,我们就可以用它们来初始化 OpenLayers 地图。来封装和管理 OpenLayers 地图的状态,从而更高效地开发地图应用。,即两个地图窗口共享同一个视图(View),从而实现同步缩放、拖动等操作。这可以确保 Vue 组件销毁时,OpenLayers 也正确销毁地图实例。,并且它们会同步缩放和拖动,达到地图联动的效果。这样,无论你拖动哪个地图,另一个都会同步变化。

小彭的博客 1940

十分钟自动执行一次_「自动化测试」微服务自动化测试简介

什么是微服务?微服务 - 也称为微服务架构 - 是一种构建方式,它将应用程序构建为松散耦合服务的集合,具有完整的业务功能。微服务架构允许连续交付/部署大型复杂应用程序。本文将概述自动微服务测试工具和最佳实践。它还使组织能够发展其技术堆栈。微服务逐渐用于创建更大,更复杂的应用程序,这些应用程序作为较小服务的组合得到更好的开发和管理,这些服务可以协同工作以实现更重要的应用程序范围的功能。大而复杂的应用...

weixin_39673471的博客 489

核心组件大换血:Backbone与Neck魔改篇:YOLO26结合StarNet结构:2026星状网络在YOLO生态的即插即用实战

本文将介绍如何将StarNet作为Backbone替换YOLO26原生架构,以提升边缘设备上的目标检测性能。文章首先分析了YOLO26在特定场景下的精度瓶颈,指出其通用Backbone设计存在不足。随后深入解析StarNet的核心创新——星操作(Star Operation),这一低维计算却能获得高维特征表达的数学魔术,以及其极简的StarBlock模块设计。通过对比YOLO26原生架构的三大创新与痛点,作者提出两种替换策略:完整替换Backbone或局部替换+Neck联调。文中提供了StarNet核心代码

ZDQ58818的博客 290

【微服务~原始真解】Spring Cloud —— 实现负载均衡

Spring Cloud 实现负载均衡

5万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

前后端分离架构,超全面详解~

此文通俗易懂,全面讲解前后端分离架构核心思想与作用,对学习微服务、开发企业项目大有裨益,建议收藏细品,好好领悟!~一、简介前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+...

独行侠梦的博客 2万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

谷粒学院——Day10【微服务调用】

微服务最早由Martin Fowler与James Lewis于2014年共同提出,微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。在传统的IT行业软件大多都是各种独立系统的堆砌,这些系统的问题总结来说就是扩展性差,可靠性不高,维护成本高。到后面引入了SOA服务化,但是,由于 SO

Java技术一点通 1093

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【收藏】程序员必读:AI时代不被淘汰的5大转型策略

AI将在3年内淘汰约50%程序员,剩下程序员必须转型为AI工具使用者或开发者。AI已能完成中小型项目全栈开发,包括前后端代码、数据库配置、单元测试等。程序员应转向需求分析、系统架构和问题解决,提升AI工具使用能力,可考虑进入AI Agent、RAG等高薪领域。学习AI的目的是解决业务问题,而非单纯学习技术。

ytt0523_com的博客 755

Docker - 微服务架构下的Docker容器化实践

本文系统阐述微服务架构下的Docker容器化实践,以电商订单系统为蓝本,涵盖Spring Boot服务、Dockerfile多阶段构建、Compose编排、网络及健康检查等核心环节,强调容器化解决环境漂移、提升交付一致性,并介绍安全与可观测性要点,代码可直接运行。

千淘万漉虽辛苦,吹尽狂沙始到金 7557

点赞收藏测试文章(让我看看有多少机器人在刷互动量)

测试:本文幻想技术乌托邦,融合AI、VR、5G、区块链,预见个性化、智能化的未来世界。

一枚菜菜子的充电站 1454

一文带你搞懂什么是测试开发!

公众号开通了也有两年多了,除了刚开通的那段时间发文比较频繁之外,从去年上半年开始,几乎很少再去打理了,翻了翻历史推文,从时间频率来讲,基本上平均2~3个月才更新一篇文章,工作忙虽是一方面,但这也只是借口,归根原因还是不够坚持。

别人的故事,是参考答案,而不是标准答案 720

软考~系统规划与管理师考试——真题篇——章节——第10章 云原生系统规划——解析版

容器化服务可以带来多种好处,容器化技术允许将应用程序和其依赖项打包成轻量级容器,实现更快速的部署和可移植性,通过应用容器化可以有效解决环境不一致的问题,确保应用在开发、测试、生产环境的一致性。在Kubernetes中,每个应用都有独立的Namespace,但应用的升级和回滚是通过编辑镜像版本来实现的。D选项的使用复杂的分布式事务处理机制也会增加开发和运维的复杂度。云原生架构中的容器技术通过监控检查探测到进程状态异常,可以自动实施异常节点的下线、新节点上线和生产流量的切换等操作,从而实现高可用性和容错处理。

stqer的博客 1330

2026年程序员涨薪指南:收藏这5个高薪方向,小白也能抓住AI红利!

2026年程序员涨薪的逻辑已经变了。以前是:技术好 → 能解决问题 → 涨薪。现在是:技术好 + 踩中趋势 + 能证明业务价值 → 涨薪。

优快云_224022的博客 294

微服务异步通信实战:AWS SNS + SQS 从入门到生产配置

微服务架构中,服务间通信常因同步调用导致链路阻塞、级联失败,异步消息队列因此成为解耦与削峰填谷的关键基础设施。消息队列作为中间件,通过发布/订阅与点对点模型分离生产者和消费者,使事件广播、任务缓冲及流量洪峰处理变得更加可靠。AWS 提供的 SNS 与 SQS 两大托管服务,分别承担广播与缓冲职责,组合成 Fanout 扇出模式,让一个事件同时分发到多个独立消费方,无需自建 Kafka 或维护额外集群。文章从队列创建、主题订阅、权限配置到 Python SDK 收发消息,完整演示如何打通事件驱动链路,并给出生

weixin_34034670的博客 461

软考~系统规划与管理师考试——真题篇——章节——第10章 云原生系统规划——纯享题目版

B:采用Serverless模式,无需关心应用运行地点和操作系统。B:可观测原则,通过日志、链路跟踪等手段实时掌握软件运行情况。C:Serverless模式,无需关心应用运行地点和操作系统。B:可观测原则,通过日志、链路跟踪等手段实时掌握软件运行情况。C:TCC模式,事务隔离性可控且高效,但对业务侵入性强。D:零信任原则,基于认证和授权重构访问控制的信任基础。D:零信任原则,基于认证和授权重构访问控制的信任基础。B:基于消息的最终一致性模式,性能高但通用性有限。

stqer的博客 757
上一篇: 优维低代码:Transform 数据转换
下一篇: 优维科技&招商基金 | 招商基金DevSecOps实践与避坑指南
优维科技EasyOps
博客等级 码龄5年 1483粉丝 395原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值