测试微服务:快速入门指南
在过去几年中,应用程序已经发展到拥有数百万用户并产生大量数据。使用这些应用程序的人期望快速响应和 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(搜索引擎优化)已经是老掉牙的玩意儿,在这个信息爆炸的年代,它似乎已经无法承担吸引流量的主要作用。但ÿ…...
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基础部分我想介绍如下几个关键点: 常见关键字命名空间的定义和使用缺省参数函数重载引用、指针和引用的区别内联函…...
Docker入门建议收藏 第二部分
二、Docker 容器技术与虚拟机的区别 Docker 到底是个什么东西呢?我们在理解 Docker 之前,首先得先区分清楚两个概念,容器和虚拟机。 虚拟机 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在…...
蓝桥杯三月刷题 第7天
文章目录💥前言😉解题报告💥三角回文数🤔一、思路:😎二、代码:💥数数🤔一、思路:😎二、代码:💥数组切分🤔一、思路:😎二、…...
面试官问百万数据excel导出功能如何实现?
文章目录 背景实现1.异步处理1.1 使用job1.2 使用mq2.使用easyexcel4.多个sheet5.计算limit的起始位置6.文件上传到OSS7.通过WebSocket推送通知8.总条数可配置9.order by商品编号总结背景 用户在UI界面上点击全部导出按钮,就能导出所有商品数据。 咋一看,这个需求挺简单的。…...
理解HTTPS及配置
HTTP的弊端及HTTPS的由来 众所周知HTTP协议是以TCP协议为基石诞生的一个用于传输Web内容的一个网络协议,在“网络分层模型”中属于“应用层协议”的一种.那么在这里我们并不研究该协议标准本身,而是从安全角度去探究使用该协议传输数据本身存在的安全问题:(1)、通信使用明文(不…...
IP-guard浏览器上传下载智能加解密,让管理更省心省力
现在员工日常工作中经常会通过浏览器访问公司的业务系统(OA、JIRA等),或者访问其他外部系统,访问下载服务器的文档变得更便捷,工作地点也不再局限于办公室中。为确保应用系统机密安全且又不影响员工的正常工作…...
leetcode day22 位运算
位运算咋这么老难 剑指 Offer 56 - I. 数组中数字出现的次数 借评论区大佬答案:nums [1,2,10,4,1,4,3,3] a^a0a^0aa^b^ca^c^ba&(-a)最低位为1的二进制(从又到左)所有的异或结果得到sum2^108flag-8&88可分为两组,一组为与…...
java中如何判断map是否为空
java中判断map是否为空的方法是:利用isEmpty()函数来判断。函数介绍:isEmpty()是Java中用于判断某种容器是否有元素的系统库函数。如用来判断ArrayList,HashSet,HashMap是否有元素等。在Java中,可以用isEmpty();判断一…...
C语言数据结构:链表的增删改查及动态创建
目录 一,链表与数组 ① 定义区别 ② 实现区别 二,链表遍历和计算链表中节点数量 ① 链表遍历 ② 计算节点数量 三,查找链表节点 四,增加节点到链表中 ① 在节点后方插入 ② 在节点前方插入 ● 在头节点前方插入 ● 在…...
「Python 基础」I/O 编程、正则表达式
文章目录1. I/O 编程文件读写StringIO 和 BytesIO操作文件和目录序列化2. 正则表达式进阶re 模块1. I/O 编程 I/O指Input/Output; Input Stream 从外面(磁盘、网络)流进内存; Output Stream 从内存流到外面; 同步 …...
java 把pdf图片文档和文章文档转成文字的方法
java 提供了一些库和工具可以用来把 PDF 文档和图片文档转成文本。 Apache PDFBox:这是一个开源的 PDF 库,可以用来提取 PDF 文件中的文本内容。 iText:这是一个用于创建和处理 PDF 文件的库,可以用来提取 PDF 文件中的文本内容。…...
什么是多页面网站/今天刚刚发生的重大新闻
前言 我是去年 9 月 22 日才正式学习网络安全的,之前在国营单位工作了 4 年,在长沙一个月工资只有 5000 块,而且看不到任何晋升的希望,如果想要往上走,那背后就一定要有关系才行。 而且国营单位的气氛是你干的多了&a…...
个人网站可以做论坛/网站推广seo
有很多的Java程序员,在初期学习时,通常会对如何学习而感到迷茫。本文千锋工作Java小编就为大家分析如何学好Java编程,相信能帮助那些正在处于迷茫状态的初学者。 1、培养兴趣 兴趣是能够让你坚持下去的动力,如果只是把写程序作为…...
asp做的手机网站/网络营销的传播手段
简述目前很多软件公司的系统架构为了实现自己的业务逻辑层与实现代码的解藕,以及很多系统存在着大量第三方产品的集成工作,使得大家都不约而同的选用了Spring这种轻量的、灵活可配的框架,Spring作为一个成熟的、被广泛认可的IOC框架在dorado的…...
做网站枣庄/微信指数官网
jQuery.validator.addMethod(name,method[,message]) name方法名 method:function(value,element,params)//value表示元素里的值 params表示元素的参数,如minlength的2 message表示提示信息 //此处以邮政编码为例: $.validator.addMethod("postCode…...
wordpress改全屏/关键词搜索数据
一、Iproute2简介 Iproute2是一个在Linux下的高级网络管理工具软件。实际上,它是通过rtnetlink sockets方式动态配置内核的一些小工具组成的,从Linux2.2内核开始,Alexey Kuznetsov 实现了通过rtnetlink sockets用来配置网络协议栈,…...
哈尔滨专业制作网站/免费b2b网站大全免费
程序功能:统计字符数、单词数 来源:自己编写 运行环境:Windows 编译语言:C语言 #include<stdio.h> void main() { int letter 0,word 0; char flag getchar(); while(flag ! #) { if(flag ! ) letter 1; else if(flag …...