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

测试微服务:快速入门指南

在过去几年中,应用程序已经发展到拥有数百万用户并产生大量数据。使用这些应用程序的人期望快速响应和 24/7 可用性。为了使应用程序快速可用,它们必须快速响应增加的负载。

一种方法是使用微服务架构,因为在单体应用程序中,主要问题是难以扩展应用程序。生成的应用程序具有非常大的代码库,并带来可维护性、部署和修改问题。

测试今天的环境比几年前更复杂。向微服务等分布式环境的过渡增加了测试的复杂性、开销和摩擦。测试需要大量的准备工作、基础设施建设和维护,因为许多服务是异步通信的。

在本测试微服务指南中,您将了解微服务架构涉及的内容、它与其他软件架构模型的比较,以及使其成为可能的技术。您还将了解在测试微服务时将面临的挑战,了解如何最好地评估它们的优点。

一、什么是微服务架构?

基本上,微服务架构是一种软件开发方法,旨在分解应用程序以隔离关键功能,每个功能都称为“服务”。

这些服务旨在响应特定且独特的业务需求,例如订单管理、运输服务、付款或通知。此外,它们是独立的和模块化的,允许在不影响其他的情况下开发和部署每个。

这种类型的架构与作为单个自治单元构建的单体架构相反。微服务越来越多地用于公司,包括最大的公司。

二、微服务架构如何工作?

微服务应用程序由多个小应用程序组成,每个小应用程序处理一个单独的应用程序功能。这些服务根据需要与其他服务进行通信以执行其功能。

如今,大多数公开 REST/GraphQL 接口的云应用程序都是使用微服务构建的。

三、单体架构与微服务架构

单体架构与微服务架构在高层有两个主要区别:单体架构是一个单一的、大型的、可执行的应用程序。微服务是一组松散解耦的服务,用于支持更大的应用程序部署。

微服务架构提供了一种不同的软件开发方法。借助云部署技术、API 管理、集成技术和微服务监控,微服务提供了一种敏捷高效的方式来部署大型、复杂的企业应用程序。

最大的区别在于,您的单体应用程序被拆分为一组独立的服务,这些服务分别进行开发、部署和维护。

1、单体架构

在开始一个项目时,很容易使用这种架构,因为它易于开发。它易于测试,部署也非常简单。但这种简单的方法在规模和复杂性方面存在局限性。随着应用程序大小的增加,存在许多缺点。

应用程序的大小会减慢启动时间。每次更新都必须重新部署整个应用程序,持续部署也很困难。

就可靠性而言,单体应用程序存在重大问题。如果其中一个组件有错误,它将停止整个应用程序和进程。

随着技术的快速发展和新技术的发明,这些应用程序的采用具有很高的障碍。由于框架或语言的更改会影响整个应用程序,因此成本非常高且非常耗时。

2、微服务架构

微服务架构代表了单体架构的范式转变。微服务分散软件开发并允许应用敏捷方法,从而加速测试和部署。

让我们看看微服务的好处,以帮助您了解是什么让微服务如此具有吸引力。

1)性能:微服务允许开发与语言无关的应用程序。这意味着团队可以使用最适合该类型应用程序的语言构建应用程序。一个团队可能会使用更合适的语言来构建订单管理应用程序的后端,而另一个团队可能会使用不同的语言来构建支付微服务。这提高了整个系统的性能。

2)独立性:由于每个服务都可以由一个专门的团队来构建,每个团队只需要担心系统的一个部分。在微服务架构中,团队可以自主构建和部署他们的服务。这允许团队独立工作,而不必担心他们的更改会极大地影响系统的整体状态。它还非常符合持续测试和交付的敏捷理念。

3)可重用性:微服务允许部分服务在其他应用程序中重复使用:如果已经为一个应用程序创建了支付功能,而另一个应用程序需要此功能,则可以在后者中使用相同的微服务。

4)可扩展性:微服务可无限水平扩展,其轻量级特性使每个服务能够更好地适应传入请求。当负载被引入系统时,可以添加额外的服务器来平衡负载。

5)可维护性:微服务具有高度容错性。即使一项服务出现故障,架构固有的隔离特性也意味着其他服务在很大程度上不会受到影响。由于个别服务相对较小,停机通常可以很快得到补救,因为可以立即清楚是服务的哪一部分导致了问题。

尽管有这些好处,微服务架构也存在一定的挑战。让我们看看与微服务架构相关的挑战。

1)复杂性:虽然每项服务都更简单,但整个系统却更复杂。作为分布式系统,必须注意选择和配置所有服务和数据库,然后独立部署这些组件中的每一个。必须考虑分布式系统的所有挑战。

2)测试:拥有许多独立的服务会使测试编写更加复杂,尤其是当服务之间存在许多依赖关系时。每个依赖服务都应该使用模拟来将服务作为一个单元进行测试。

3)数据完整性:微服务具有分布式数据库架构,这对数据完整性是一个挑战。一些业务交易,需要更新应用程序中的几个业务功能,需要更新属于不同服务的几个数据库。这需要最终的数据一致性,这对开发人员来说更复杂且更不直观。

四、开始测试微服务

微服务架构的测试过程与通常的测试过程有很大不同。微服务架构的特殊性在于,软件是由后端运行的多个服务提供的。

因此,我们需要一种不同且更广泛的测试方法,因为在开发过程中执行集成测试或遍历主要流程可能具有挑战性。

但是,我们可以快速更新单个微服务并对其进行测试,而不会影响其他微服务。

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

测试微服务的挑战

微服务需要额外的步骤,例如管理多个存储库和分支,每个存储库和分支都有其数据库模式。但与微服务架构相关的测试挑战可能比这更深刻。

以下是与测试微服务相关的一些关键挑战:

可用性:由于不同的团队可能会管理他们的微服务,因此很难确保微服务的可用性(或者,更糟糕的是,试图找到所有微服务同时可用的时间)。

碎片化和整体测试:微服务旨在单独工作以及与其他松散耦合的服务一起工作。这意味着开发人员必须单独测试每个组件,以及一起测试所有组件。

知识差距:尤其是集成测试(我们将在本文后面讨论),无论谁进行测试都需要很好地理解每个服务才能有效地编写测试用例。

五、测试微服务时的测试类型

现在,让我们仔细看看所有的微服务测试类型

1、单元测试

单元测试是一种软件测试,可让您检查各个模块或软件组件的准确性。目标是验证每个代码单元是否正常工作。

在功能开发阶段,开发人员独立编写单元测试,因为每个开发人员都比测试人员更了解和理解他们代码的工作原理,并且可以更好地执行此任务。

这使您可以快速检查下一个代码更改是否导致回归,即先前测试的代码部分是否出现错误。它还使检测和消除此类缺陷变得更加容易。

2、合同测试

它是在外部服务边界的测试,验证它是否满足消费者服务所期望的契约。

契约测试是一种通过隔离每个微服务并检查微服务传输的HTTP 请求和响应是否符合契约中记录的共同理解来测试集成点的技术。

通过这种方式,契约测试确保微服务可以通信。

3、集成测试

集成测试检查通常属于同一子系统的不同模块(或类)之间的交互,以确保它们在提供高级功能时按预期协同工作。

集成测试还检查子系统采用的所有通信路径是否正确,并检测每个模块可能对其对等体应该如何行动的任何错误假设。这种类型的测试被认为是整个架构中最关键的测试。

4、组件测试

组件是一个微服务或一组微服务,它们在更大的系统中完成一个角色。组件测试允许您独立验证和评估微服务应用程序的每个组件的性能,而无需集成其他服务。

通常,运行组件测试比评估微服务更容易和更快。

由于微服务测试难度大、速度慢,需要模拟其他微服务或依赖。您可以通过用测试副本或虚拟服务器替换它们来隔离依赖关系。

5、端到端测试

端到端测试建立在集成测试的基础上,集成测试又建立在您所学的所有其他形式的测试之上。顾名思义,E2E 将业务逻辑作为一个集成测试过程进行测试,不是孤立的,而是作为整个系统的一部分。

从理论上讲,它们应该模拟应用程序的真实用户或至少执行真实用户的操作。这些测试通常最难编写并且消耗最多的开发时间。

最后的想法

微服务架构是一种软件架构模型,其中较大应用程序的每个任务都作为一个独立的应用程序呈现。

与其他架构相比,微服务具有许多优势,包括更容易的部署和更好的可扩展性。然而,它们也面临一些挑战,包括测试。

在测试微服务时,需要考虑优点和缺点。一方面,微服务可以独立测试,更容易发现和修复错误。另一方面,微服务必须相互协调进行测试,这可能更加复杂和耗时。

六、常见问题 (FAQ)

1、我们如何测试微服务?

测试微服务涉及多种方法:单元测试、集成测试、功能测试等。这些测试可以使用测试框架、工具和基础设施的组合来自动化。测试方法的选择取决于微服务的具体需求和项目的要求。

2、微服务的三种测试类型是什么?

微服务的三种主要测试类型是:

单元测试:专注于单独测试各个微服务组件,以确保它们按预期运行。

集成测试:验证微服务之间的交互以确保它们按预期协同工作。

端到端测试:从头到尾测试微服务的功能,以验证它是否满足要求并与系统中的其他组件集成。

3、什么是软件测试中的微服务?

软件测试中的微服务是指用于评估微服务架构中各个组件的功能、性能和安全性的测试方法。微服务架构将软件应用程序构建和部署为一组小型的、可独立部署的服务。

4、你如何在本地测试微服务?

在本地测试微服务涉及以下步骤:搭建本地开发环境、编写并运行单元测试、执行集成测试、端到端地测试微服务、调试并修复任何问题。

尽可能多地自动化测试过程非常重要,以确保微服务得到彻底测试,并在代码发生更改时更容易重复测试过程。JUnit、TestNG 和 Selenium 等自动化测试工具可以使测试过程自动化,并减少在本地测试微服务所需的时间和精力。

相关文章:

测试微服务:快速入门指南

在过去几年中,应用程序已经发展到拥有数百万用户并产生大量数据。使用这些应用程序的人期望快速响应和 24/7 可用性。为了使应用程序快速可用,它们必须快速响应增加的负载。 一种方法是使用微服务架构,因为在单体应用程序中,主要…...

MySQL Show Profile分析

6 Show Profile分析(重点) Show Profile是mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优的测量 官网文档 默认情况下,参数处于关闭状态,并保存最近15次的运行结果 分析步骤: 1、是否…...

基于Docker快速搭建蜜罐Dionaea(30)

实验目的 1. 快速搭建Dionaea蜜罐 2. 使用Nmap扫描测试Dionaea蜜罐预备知识1. 初步认识Dionaea dionaea,中文的意思即捕蝇草,是否形容蜜罐很形象?dionaea是nepenthes(猪笼草)的发展和后续,更加容易被部署和…...

WP_Query 的所有参数及其讲解和实用案例

WP_Query 是 WordPress 提供的一个强大的查询工具,用于获取与当前页面或文章相关的内容。下面是 WP_Query 的所有参数及其讲解:author: 查询特定作者的文章。可以是作者 ID、作者登录名或作者昵称。实用案例:查询作者为 "John Smith&quo…...

100个网络运维工作者必须知道的小知识!(上)

1)什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2)OSI参考模型的层次是什么? 有7个OSI层:物理层,数据链路层,网络层,传输…...

Python如何获取大量电影影评,做可视化演示

前言 《保你平安》今天上映诶,有朋友看过吗,咋样啊 这是我最近比较想看的电影了,不过不知道这影评怎么样,上周末的点映应该是有蛮多人看的吧,可以采集采集评论看过的朋友发出来的评论,分析分析 这周刚好…...

【C语言】详讲qsort库函数

qsort函数介绍具体作用qsort函数是一种用于对不同类型数据进行快速排序的函数,排序算法有很多最常用的冒泡排序法仅仅只能对整形进行排序,qsort不同,排序类型不受限制,qsort函数的底层原理是一种快速排序.基本构造qsort( void* arr, int sz, int sizeof, cmp_code);…...

SEO技术风口来了|SEO能否抓住全球约93%的网络用户?

开篇词作者/出品人 | 美洽 SEO 流量专家 白桦为什么要做一个 SEO 专栏?在一部分人眼中,SEO(搜索引擎优化)已经是老掉牙的玩意儿,在这个信息爆炸的年代,它似乎已经无法承担吸引流量的主要作用。但&#xff…...

mxnet版本与numpy,requests等都不兼容问题

简介 跟着李沐学AI时遇到的mxnet环境问题。 问题 使用pip install mxnet时会重新安装相匹配的numpy和requests,而这新安装的这两个版本不满足d2l所需的版本。 然后报错: ERROR: pips dependency resolver does not currently take into account all …...

逆向分析——壳

你脑海中的壳是什么 壳在自然界是动物的保护壳,软件同样有保护壳,为了防止破解 也许大海给贝壳下的定义是珍珠,也许时间给煤炭下的定义是钻石 ——沙与沫 壳的由来 在DOS时代,壳一般指的是磁盘加密软件中的一段加密程序 后来发展…...

为 Argo CD 应用程序指定多个来源

在 Argo CD 2.6 中引入多源功能之前,Argo CD 仅限于管理来自 单个 Git 或 Helm 存储库 的应用程序。用户必须将每个应用程序作为 Argo CD 中的单个实体进行管理,即使资源存储在多个存储库中也是如此。借助多源功能,现在可以创建一个 Argo CD 应用程序,指定存储在多个存储库…...

verilog specify语法

specify block用来描述从源点(source:input/inout port)到终点(destination:output/inout port)的路径延时(path delay),由specify开始,到endspecify结束&…...

CMake编译学习笔记

CMake学习笔记CMake编译概述CMake学习资源CMake编译项目架构cmake指令CMakeList基础准则CMakeList编写项目构建cmake_minimum_required() 和 project()set()find_package()add_executable()aux_source_directory()连接库文件include_directories()和target_include_directories…...

Day913.反向代理和网关是什么关系 -SpringBoot与K8s云原生微服务实践

反向代理和网关是什么关系 Hi,我是阿昌,今天学习记录的是关于反向代理和网关是什么关系的内容。 一、反向代理 反向代理 是一种网络技术,用于将客户端的请求转发到一个或多个服务器上,并将响应返回给客户端。与正向代理不同&am…...

IT行业就业趋势显示:二季度平均月薪超8千

我国的IT互联网行业在近些年来规模迅速扩大,技能和技术水平也明显提升,目前IT互联网行业已经成为社会发展中新型产业的重要组成部分,行业的人才队伍也在不断的发展壮大,选择进入入互联网行业工作的人也越来越多。 根据58同城前段…...

【毕业设计】基于Java的五子棋游戏的设计(源代码+论文)

简介 五子棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用Java开发五子棋游戏。主要完成了人机对战和玩家之间联网对战2个功能。网络连接部分为Socket编程应用,客户端…...

C#:Krypton控件使用方法详解(第十四讲) ——kryptonSeparator

今天介绍的Krypton控件中的kryptonSeparator。下面介绍控件的外观属性如下图所示:Cursor属性:表示鼠标移动过该控件的时候,鼠标显示的形状。属性值如下图所示:DrawMoveIndicator属性:表示确定移动分隔符时是否绘制移动…...

Java的jar包打包成exe应用

将springboot项目使用maven打出的jar包,打成windows平台下exe应用程序包(自带jre环境)。 工具:1、exe4j 2、Inno Setup 工具放到网盘,链接:https://pan.baidu.com/s/1ZHX8P7u-7GBxaC6uaIC8Ag 提取码&#x…...

Latex学习笔记

Latex 学习笔记 快速入门 编译软件: TeX Live TexStudio, Ctex, 线上: Overleaf第一个示例代码: \documentclass{article} % 设置文档使用的文档类 % 导言区 \title{my first Latex document} \author{Jclian91} \date{\today} \begin{document} % 正文区\maket…...

【c++复习】C++的基础知识(常用关键字、缺省参数、函数重载、引用)

C基础写在开头C基础常用关键字using namespace流插入和流提取操作符内联函数(inline)宏auto关键字 (c11nullptr (c11缺省参数函数重载引用写在开头 C基础部分我想介绍如下几个关键点: 常见关键字命名空间的定义和使用缺省参数函数重载引用、指针和引用的区别内联函…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...