微服务测试怎么做

开发团队越来越多地选择微服务架构而不是单体结构,以提高应用程序的敏捷性、可扩展性和可维护性。随着决定切换到模块化软件架构——其中每个服务都是一个独立的单元,具有自己的逻辑和数据库,通过 API 与其他单元通信——需要新的测试策略和新的测试工具。

测试微服务是微服务应用程序过程的关键部分:您需要确保您的代码不会在单元内中断,微服务中的依赖项继续工作(并快速工作),并且您的 API 符合定义的协议,然而,由于许多微服务采用持续交付模式构建以一致地构建和部署功能,因此开发人员和 DevOps 团队需要准确可靠的测试策略才能对这些功能充满信心。

那么微服务存在哪些不同类型的测试,它们如何适用于软件的其他领域,它们有什么好处?众所周知的“测试金字塔”可以为接下来这些测试提供一个测试框架。

根据软件工程原理的著名作者 Martin Fowler 的说法,“‘测试金字塔’是一个隐喻,将软件测试分组到不同粒度的桶中。”

金字塔的不同层次定义为:

  • 单元测试:测试服务的一小部分,例如类。

  • 组件测试:验证单个服务的行为。

  • 集成测试:通过测试服务的适配器来验证服务是否可以与基础设施服务(例如数据库和其他应用程序服务)进行交互。

注意:

某些版本的测试金字塔会切换组件测试和集成测试的顺序。

  • 端到端测试:验证整个应用程序的行为。

结合多种微服务测试策略可以提高测试覆盖率和对软件的信心,同时也使整体维护更易于管理

单元测试

单元测试旨在确保服务的最小部分在微服务设计阶段确定的规范内按预期执行。由于微服务将应用程序功能分解为数百个可测试的小型功能组件,因此单元测试会单独且独立地处理每个组件。最好在一个类或一组相关类的级别上进行单元测试。

单元测试可以通过使用测试替身(例如 fakes、stubs、mocks、dummies 和 spies)来切断组件的依赖关系。例如,测试人员可以模拟您的依赖项的响应并“假设他们执行 [X]”,其中 [X] 是正确响应、失败响应等。

组件测试

组件测试验证给定服务是否正常运行。由于范围仅限于整个微服务架构的一部分,组件测试通过隔离系统内的服务来检查所选微服务(可以由几个类组成)的端到端功能,将其依赖项替换为测试双打和/或模拟服务

您可以为将被划分为测试用例的每个组件创建测试环境。它可能涉及测试资源行为,例如性能测试、确定内存泄漏、结构测试等。

集成测试

集成测试验证独立开发的组件/微服务在连接时是否正常工作。它测试组件之间的通信路径和交互并发现错误。

集成测试的编写和运行变得更加困难和耗时。因此,拥有出色的生产 QA(质量保证)实践将有助于确保顺利进行。

合同测试

在测试金字塔中调用合约测试至关重要。接触测试通过确保它们可以相互通信来检查独立单元(如两个微服务)的兼容性。合同测试测试 API 的工作方式,这是微服务相互交互的方式。

合约测试检查这些微服务的边界和交互,并将它们存储在合约中,然后可以将其用作双方未来如何交互的标准。它要求双方就允许的交互集达成一致,并允许随着时间的推移而演变。

端到端测试

端到端测试(E2E 测试)是最终测试阶段,涉及从头到尾测试应用程序的工作流程以实现完整的用户旅程。

这些测试可以自动化,但 E2E 测试仅针对超关键流进行。它在微服务架构中不能很好地扩展,因为它需要启动许多微服务并将它们连接起来,这对于自动化和维护是具有挑战性的。因此,它仅用于测试特定微服务之间的关键交互。

要使用的微服务测试工具,包括按需登台环境

开发人员和 QA 团队对微服务测试工具有不同的偏好,尤其是对于这些不同类型的测试。以下是一些流行的概要。许多是按需登台环境,它们是动态创建的,由 CI/CD 管道触发。使用按需登台,一旦开发人员完成登台环境,登台环境以及任何配置、环境或安装不一致都会被破坏。

releasehub

该平台是一个按需登台环境,具有可访问的协作共享功能。您可以将应用程序的存储库连接到 Release,然后为每个拉取请求和每次代码推送的更新创建临时环境。此外,可以为集成、传统登台或 QA/UAT 用例创建环境。开发人员和 QA 可以完全访问环境以进行测试和调试,并且产品团队、设计团队和利益相关者可以看到功能的发展并尽早并经常提供反馈。

WebApp.io(以前的 LayerCI)**

WebApp.io 是一个代码审查自动化平台,允许为全栈 Web 应用程序提供按需审查环境。您可以创建自定义拉取请求。一旦您创建了堆栈的一个副本,您可以立即复制它以自动运行 e2e 测试并集成到 CI/CD 工作流中。WebApp 将自动在 GitHubGitLab 或 BitBucket 中注释您的拉取请求。

Vercel

Vercel 是一个用于前端框架、无服务器功能和静态站点的云平台,旨在与预先存在的内容和数据库集成。它托管的网站和 Web 服务可即时部署、自动扩展且无需监督,所有这些都无需配置。它还提供边缘位置托管和缓存。它类似于 Amazon Web Services (AWS) Lambda 或 Netlify。

Pact

Pact 是一个代码优先的消费者驱动的合同测试工具,适用于编写代码的开发人员和测试人员。它使用合同测试来测试 HTTP 和消息集成——验证应用程序间消息是否符合共同理解的方法,并记录在合同中。这种合同测试方式减少了大型单元测试

Apache JMeter

Apache JMeter 是测试人员常用的基于 Java 的性能测试工具。它是一个开源平台,可以用作负载测试工具,用于分析和测量 Web 应用程序的性能

Hoverfly

Hoverfly 是一个自动化的、开源的 API 通信模拟工具用于专门的集成测试。用户可以测试 API 在速率限制和/或网络延迟等场景中的反应。

Grafana

Grafana 提供免费的指标可视化和分析。仪表板让开发人员可以查看时间序列数据,以观察微服务在实时流量中的响应方式。

Gatling

Gatling 是一个用 Scala 编写的负载测试工具。它可以在多个平台上运行模拟,然后报告活跃用户数量和响应时间等指标。

结论

微服务的测试、调试和维护部分通常是使用微服务架构中最具挑战性但必不可少的部分。希望以上信息可以帮助您了解不同的测试类型和工作的最佳工具。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python 基础语法学习 (二)

多变量赋值 当你在Python中进行多变量赋值时,你可以在一行代码中同时为多个变量分配值。这种方法可以简化代码并提高可读性。下面是一些关于Python多变量赋值的基本知识: 基本赋值:你可以使用等号()将一个值分配给一…

SimaPro生命周期评估建模与碳足迹分析流程

SimaPro以系统和透明的方式轻松建模和分析复杂的生命周期,通过确定供应链中每个环节的热点,从原材料的提取到制造,分销,使用和处置,衡量所有生命周期阶段的产品和服务对环境的影响。SimaPro是过去25年评估生命周期的最…

容联云发布生成式应用,让每个企业都拥有大模型沟通能力

基于容联云自主研发的赤兔大模型能力,容联云容犀机器人真正将大模型强大的理解能力、知识学习能力、总结能力、挖掘能力、推理能力融入于实际落地应用中。 开创性的打造生成式场景化智能问答、生成式智能辅助、AI运营话术库,帮助企业洞悉更精准的客户真…

【游戏开发】嘿!要听听我与口袋方舟的故事嘛

目录 写在前面 我与口袋方舟的邂逅 口袋方舟编辑器 027版本正式公测 更新亮点 粉丝福利 写在后面 写在前面 哈喽小伙伴们下午好呀,这里是一只有趣的兔子。最近博主在到处整活给大家谋福利,这次兔哥打听到了一个劲爆的消息,口袋方舟正…

加密数字货币:机遇与风险并存

随着区块链技术的发展和普及,加密数字货币逐渐走入人们的视线。作为一种以数字形式存在的资产,加密数字货币具有去中心化、匿名性和安全性高等特点,为人们提供了一种全新的支付方式和投资选择。然而,加密数字货币市场也存在着较高…

跨界融合 开放共享∣2023中国林草经济发展博鳌大会即将开启

2023第二届中国林草经济发展博鳌大会(以下简称“2023 林草大会”)将于11月19-20日在海南博鳌亚洲论坛国际会议中心盛大开幕。本次活动由海南省商务厅、海南省林业局支持,中国林业产业联合会、中国林产工业协会、华侨茶业发展研究基金会、北京…

CPU版本的pytorch安装

1.安装:Anaconda3 2.安装:torch-2.0.1cpu-cp311 2.安装:torchvision-0.15.2cpu-cp311-cp311-win_amd64 测试是否安装成功 cmd 进入python import torch print(torch.__version__) print(torch.cuda.is_available())

Protobuf 语法

Protobuf语法 1.1.1. 基本规范 文件以.proto做为文件后缀,除结构定义外的语句以分号结尾 结构定义可以包含:message、service、enum rpc方法定义结尾的分号可有可无 Message命名采用驼峰命名方式,字段命名采用小写字母加下划线分隔方式 …

conda环境下Tesseract:Failed loading language ‘eng‘问题解决

1 问题描述 使用Tesseract进行ocr文字识别,运行识别代码,报错如下: C:\Users\lishu\anaconda3\envs\pt2\python.exe D:/code/ptcontainer/opencv/car_reg.py Traceback (most recent call last): File "D:\code\ptcontainer\opencv\…

《QT从基础到进阶·三十三》QT插件开发QtPlugin

插件和dll区别: 插件 插件主要面向接口编程,无需访问.lib文件,热插拔、利于团队开发。即使在程序运行时.dll不存在,也可以正常启动,只是相应插件功能无法正常使用而已; 调用插件中的方法只要dll即可&#x…

【软件测试】接口测试中Post方法怎么测?

GET方法和POST方法传递数据的异同 http请求方法get和post是最常被用到的两个方法,get常用于向服务器请求数据,post常用于提交数据给服务器处理。 GET方法其实也可以传递少量的数据。 但它存在以下问题: 1)GET 方法不包含body,因此…

新手买电视盒子哪个好?数码粉实测电视盒子排名

新手们在买电视盒子时面对众多的品牌和机型,往往不知道电视盒子哪个好,我作为资深数码粉,已经买过十来款电视盒子了,近来某数码论坛公布了最新的电视盒子排名,我购入后进行了一周的深度实测,结果如何&#…

Java-整合OSS

文章目录 前言一、OSS 简介二、OSS 的使用1. Bucket 的创建与文件上传2. 创建 RAM 与用户授权3. 图形化管理工具-ossbrowser 三、Java 整合 OSS1. 基本实现2. 客户端直传 前言 最近公司的技术负责人让我整合下 OSS 到项目中,所以花了一点时间研究了下 OSS&#xff…

Redis内存淘汰机制

Redis内存淘汰机制 引言 Redis 启动会加载一个配置&#xff1a; maxmemory <byte> //内存上限 默认值为 0 (window版的限制为100M)&#xff0c;表示默认设置Redis内存上限。但是真实开发还是需要提前评估key的体量&#xff0c;提前设置好内容上限。 此时思考一个问题…

高质量发展项目——党务工作者能力提升培训在京成功举办

2021年6月&#xff0c;国务院办公厅印发了《关于推动公立医院高质量发展的意见》。为认真贯彻落实公立医院党建工作重点任务&#xff0c;加强公立医院党建&#xff0c;健全现代医院管理制度&#xff0c;实行党委领导下的院长负责制。发挥院级党组织把方向、管大局、作决策、促改…

flutter仿支付宝余额宝年化收益折线图

绘制: 1.在pubspec.yaml中引入:fl_chart: 0.55.2 2.绘制: import package:jade/utils/JadeColors.dart; import package:util/easy_loading_util.dart; import package:fl_chart/fl_chart.dart; import package:flutter/material.dart; import package:flutter_screenutil/…

MySQL分页查询的工作原理

前言 MySQL 的分页查询在我们的开发过程中还是很常见的&#xff0c;比如一些后台管理系统&#xff0c;我们一般会有查询订单列表页、商品列表页等。 示例&#xff1a; SELECT * FROM goods order by create_time limit 0,10; 在了解order by和limit的工作原理之前&#xff0c…

[DB] (数据库工具) navicat 平替 jookdb

jookdb 官方下载 csdn下载(免积分) 解压后直接可以使用 测试数据库适配性. mysql.mariadb.oracle.sqlserver免费使用 除外的提供20天免费试用驱动添加是java的jdbc驱动,可以通过 https://developer.aliyun.com/mvn/view 进行下载数据库的基本操作.包含数据库的新增, 库表新增…

SQLSERVER 遍历循环的两种方式很详细有源码(1)

1.普通循环 Create table WS_Student ( [Id] int primary key not null, [My_Cocode] [int], [My_SCocode] [int], [userId] [bigint], [SetCName] [varchar](50) NULL, [SetEName] [varchar](50) NULL, [SetPcode] [varchar](50) NULL, [Se…

单相浪涌保护器和三相浪涌保护器的区别

浪涌保护器&#xff0c;也称为防雷器&#xff0c;是一种为各种电子设备、仪器仪表、通讯线路提供安全防护的电子装置&#xff0c;主要用于限制过电压和泄放电涌电流。浪涌保护器的核心元件是内部的一个非线性元件。根据非线性元件的不同&#xff0c;浪涌保护器可以分为开关型&a…