首页 > 其他分享 >读懂这篇文章,就掌握微服务测试核心了!

读懂这篇文章,就掌握微服务测试核心了!

时间:2023-09-27 11:03:40浏览次数:28  
标签:服务 请求 接口 读懂 Mock 篇文章 测试 mock


最近我写了四篇关于微服务测试的文章,本文介绍微服务测试的核心点,前面三篇分别介绍了:

入门微服务必须了解的概念 一文搞定微服务测试本质

微服务负载的重要性 微服务性能测试的关键——IP欺骗技术

微服务如何查询应用日志 微服务测试的关键——通过ELK查询日志

相信这几篇文章一定会帮助大家在微服务测试领域实现从0到1的突破!

传统测试与微服务测试的区别

传统测试模型抽象

读懂这篇文章,就掌握微服务测试核心了!_微服务

上图中的服务器端包括n个功能,传统服务是所有的功能都部署在一台机器上,通过增加服务器数量来扩容!参考下图(每一种颜色代表一个功能,部署了四套同样的服务)

 

读懂这篇文章,就掌握微服务测试核心了!_单元测试_02

微服务测试模型抽象

读懂这篇文章,就掌握微服务测试核心了!_微服务_03

微服务不同于传统测试,它往往没有UI页面,我们需要通过构建请求(通过编码或者工具模拟)调用各个服务接口。微服务是以业务为单位进行部署的,上图中的每一个服务代表一个功能,不同的业务部署在不同的服务器上,业务使用频繁的还可以使用更多的资源进行部署(下图中橘黄色部署了5个单元,而玫红色只部署了1个单元),这样就可以更合理的利用资源了。

读懂这篇文章,就掌握微服务测试核心了!_软件测试_04

微服务的主要测试内容

单元测试:从服务中最小可测试单元视角验证代码行为符合预期,以便测试出方法、类级别的缺陷。

集成测试:验证当前服务与外部模块之间的通信方式或者交互符合预期,以便测试出接口缺陷。

组件测试:将测试范围限制在被测系统的一部分(一般是单个服务),使用测试替身(mock)将其与其他组件隔离,以便测试出被测代码的缺陷。

契约测试:验证当前服务与外部服务之间的交互,以表明它符合消费者服务所期望的契约,本质验证接口规范

UI测试:传统的点点点页面测试。

其中,集成测试、组件测试和契约测试是我们的测试重点,而上述三种测试,我们可以理解为接口测试(关于什么是接口测试这里就不再详细介绍了)。即每个服务提供对外接口,然后我们通过这个接口对服务进行调用,最后验证其返回值是否达到预期!我们可以通过编码或者工具来构建接口并向接口发起请求,然后按照接口文档来校验响应是否符合预期。

微服务测试注意事项

微服务可以分为无依赖的服务和有依赖的服务。

无依赖的服务:自己就能够满足调用者的需求提供完整的服务功能,无需其他服务提供功能。我们直接对该服务提供的接口进行测试即可

有依赖的服务:自己不能够满足调用者的需求,需要其他服务提供某一种或多种功能,一起向调用者提供完整的服务功能。此时我们需要隔离掉单个微服务依赖的其他微服务,避免测试过程中受到依赖服务的影响(如服务不可用、服务缺陷等)而出现阻塞测试过程、测试无效等情况。通常使用mock技术将被测服务与依赖的服务进行隔离,使得服务链路稳定、环境可控,这有利于测试过程的开展。Mock概念起源于单元测试,单元测试中我们只关注被测的单元,而不关心其他依赖的内容。Mock让我们有了一套仿真的环境,不用担心在检查单元内的内部流转的过程时还会因为环境的关系导致验证过程失败。由于外部环境的多样性,单元测试应该设计一些异常场景使得代码能够捕获该异常。例如在下图a中,如果我们要对A进行测试,那么就要先把整个依赖树构建出来,也就是BCDE的实例,该方案的成本极高。一种替代方案就是使用mock,如图b所示,我们只需要规定 Mock B 和Mock C 在接收到A的请求后给出对应的响应即可(无需在Mock B 和Mock C中执行复杂的逻辑运算)。在代码实现层面,我们可以通过mockito(针对java)实现mock操作。

读懂这篇文章,就掌握微服务测试核心了!_单元测试_05

图a

 

读懂这篇文章,就掌握微服务测试核心了!_软件测试_06

图b

在微服务测试中mock的服务又是什么呢?举个例子,我们把支付功能做成微服务,该服务负责处理支付的逻辑,而在最后付款时,我们需要调用支付宝来完成付款。那么这个场景该如何处理呢?简单方式,我们花一分钱真实的购买服务。那么假设我们要验证10000元购买服务呢?或者当支付宝出错时,我们的程序又该如何处理呢?在这里我们就可以把支付宝作为一个mock服务,核心实现思路如下:

对应用的请求进行解析,并返回预先定义好的响应值,具体如下:

1.支付请求校验正确,返回支付成功;

2.支付请求校验失败,返回支付失败;

3.关掉支付宝mock服务,可以模拟支付宝异常

我们可以使用wiremock来搭建自己的mock服务器,简单原理如下图所示:

读懂这篇文章,就掌握微服务测试核心了!_软件测试_07

我们需要在配置文件中设置预定义的请求,如果应用的请求符合预定义请求则返回预定义的响应。然后启动wiremock来实现请求的处理,wiremock就是一个web服务器!具体详情请参考:https://github.com/tomakehurst/wiremock

微服务测试总结

1. 如果你只做UI功能测试,那么微服务测试与传统测试没有区别,因为你只你感受不到架构的变化。

2.对各个微服务提供的接口测试本质上等价于接口测试。需要按照微服务的接口说明文档进行接口功能以及性能和安全的测试。

3.必要时需要通过mock方式来模拟微服务所依赖的服务来提升被测服务的可测性。

4.要关注负载均衡,测试请求是否分发到多点应用。参考文章:微服务性能测试的关键——IP欺骗技术

5.通过工具 SpringCloud Sleuth、 Turbine、Prometheus对各个服务消耗的资源(包括:cpu、内存、磁盘,网络)进行监控;

6.通过ELK( ElasticStack )来集中化管理日志。参考文章:微服务测试的关键——通过ELK查询日志

7.理解微服务核心概念。参考文章:一文搞定微服务测试本质

标签:服务,请求,接口,读懂,Mock,篇文章,测试,mock
From: https://blog.51cto.com/liwen629/7621665

相关文章

  • 五分钟理解什么是自动化测试架构设计
    自动化测试常见的问题如下:1)产品UI经常变化,导致测试脚本不能复用。(2)测试脚本不够健壮,导致脚本回放时,测试脚本本身经常出错。(3)网络延迟,数据加载延迟造成测试脚本失败。(4)识别对象的ID可读性差,导致测试脚本的可读性差。(5)录制的测试代码过于庞大而且应变性差,导致测试脚本的复用......
  • 测试同学必须熟悉的python模块
    测试同学在进行python的面试过程中,必问的问题是你最常用的python模块有哪些?这些模块解决了你工作中的哪些问题?在这里我把测试同学在实际工作中常用的py模块进行了汇总,本文编写的目的是对各个模块的功能进行概要介绍并没有提供具体api的使用方法,如果大家想要深入了解各个模块api的具......
  • 一文读懂倒排序索引涉及的核心概念
    基础概念相信对于第一次接触Elasticsearch的同学来说,最难理解的概念就是倒排序索引(也叫反向索引),因为这个概念跟我们之前在传统关系型数据库中的索引概念是完全不同的!在这里我就重点给大家介绍一下倒排序索引,这个概念搞明白之后,然后学习Elasticsearch就会清晰很多了。正向索引和......
  • 一文读懂:下一代微服务技术Service Mesh
    相信提到微服务大家一定不会陌生,但是说起服务网格,即ServiceMesh,很多同学可能就会画大大的问号了!话不多说先给结论:我们可以简单的把ServiceMesh理解为网络代理,它可以解决传统微服务中的痛点,把服务通信及相关管控功能从业务中分离!网络代理网络代理可以简单类比成现实生活中的中......
  • Jmeter场景组合测试——多个线程组的设计方案
    我们绝大多数同学在使用jmeter进行性能测试时都会在一个线程组中完成测试工作,今天我来重点讲解一下jmeter多个线程组在测试中的应用,这也是关于jmeter性能测试面试过程中的进阶问题,希望能够帮到大家来解决工作中不同的测试需求。线程组中的线程执行顺序是什么?首先大家需要明确一......
  • 测试技能提升篇——一文理解消息中间件里那些通用的核心概念
    我们测试同学在实际工作中或多或少都会接触过ActiveMQ、RabbitMQ,Kafka,和RocketMQ这类消息中间件产品,不同的公司会选择不同的产品,大家可能会觉得产品比较多,了解起来有些复杂!其实无论使用哪种中间件产品,他们的核心功能都是比较类似的。本文就不来汇总一下中间件产品的核心概念,给大家......
  • 测试技能提升篇——Docker的核心概念
    Docker已经不是什么新技术了,相信绝大多数同学在实际工作中都会对其有一定的了解,使用一些常用的命令行执行一些操控容器的基础操作,这方便的网络资源实现太多了,在这里就不进行相关讲解了。本文重点介绍一下涉及Docker的相关概念以及其核心组件的作用,相信会帮助想要深入研究Docker的同......
  • 测试技能提升篇——脏读、不可重复读、幻读的区别
     脏读事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据不可重复读事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。脏读与不可重复读的区别在于前者读到的是其他事务未提交的数据,后者读到的......
  • drf 测试(车型、车场、经销商)
    一、实现要求1有车型(CarModel),车厂(CarFactory),经销商(Distributor)三个表,一个车厂可以生产多种车型,一个经销商可以出售多种车型,一个车型可以有多个经销商出售车型:车型名,车型出厂价,车厂id车厂:车厂名,车厂地址,联系电话经销商:经销商名,地址,联系电话2有用户表,基于django内......
  • 本地测试Spark的svm算法
    上一篇介绍了逻辑回归算法,发现分类效果不好,通过这次的svm发现是因为训练数据不行,于是网上找了部分训练数据,发现实际上分类效果还可以。    训练数据,第一个值是标签,下面的数据是某种花的相关特征。1|5.1,3.5,1.4,0.21|4.9,3,1.4,0.21|4.7,3.2,1.3,0.21|4.6,3.1,1.5,0.21......