微服务的测试策略

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 微服务的测试策略

640.jpg在之前的文章中,我们聊了关于单体微服务的测试策略,有读者反馈想知道从宏观上微服务的测试策略要如何进行,本文就来探讨一下这方面的思考。


01


微服务指的是技术层面的服务细化,并不是业务层面的变革。


所以,测试微服务应用程序与测试使用任何其他体系结构构建的应用程序没有什么不同,原来的那套测试理论,640.png还是适用的。

 


我们暂时把微服务看成是一个较大体系的“黑盒”,因为业务上没有变化,所以我们原来熟悉的等价类、场景法、探索性测试等测试策略还是可以照样执行,没有太多需要做出改变的,因为业务没有太大的变化。需要注意的是,基于风险的测试策略可能会发生一些变化,因为风险因素变多了,需要考虑的影响因子变多,风险分析、评估需要考量更多的内容而已。


02


好了,我们现在再把“黑盒”打开,看看微服务的技术架构给测试带来了哪些新的风险。我们需要针对这些新的挑战做出一些不一样的策略。


微服务的稳定性:在单体架构中,业务的封装调用是基于函数来进行的,几乎不存在调用失败的情况。也不会存在版本不致的情况(都在一套代码内)。但是拆成微服务后,就会面临两个问题。


第一,服务依赖得不可控:因为微服务都是可以被独立部署的,那么部署的版本就会变得不可控,那就意味着可能你调用的接口版本会发生变化,导致调用失败(这类问题会在下次的文章中重点介绍,契约测试是个不错的解决方案)。


第二,连接调用存在失败风险:微服务之间的通信要么基于Rest,要么基于RPC,都会有可能因为网络波动导致调用失败,从而引发业务问题。


针对这个问题,通常采用的策略做好微服务的版本管理,在调用链路上配置版本依赖关系,做到环境的复用。如果做不到,那就从物理上做隔离即可,尽可能缩小影响范围。


微服务的可用性:在单体构架中,代码的可用性依赖于整体的性能表现,如果某个代码段出现性能问题,会影响整体的业务表现,比较容易被发现。但是在微服务中,我们无法有效地获取其他微服务的运行状态,这就需要有统一的组件来管理,通常情况下是Hystrix与Sentinel(当然还有其他的选择,看团队的技术选型)。处理的方式有两种:熔断、降级。


熔断指的是当下游的服务因为某种原因突然变得不可用或响应过慢,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。


降级指的是:服务主动停掉一些不太重要的业务,释放出服务器资源,增加响应速度。


针对这个问题,测试策略主要集中在机制的配置与生效验证上,如何保障配置的熔断降级机制能够有效,是测试的重点和难点。一般会通过性能压测来模拟。


数据一致性问题:当前面两种情况发生后,就有可能导致各微服务之间的数据不一致,从而影响业务。比如在购物的流程中订单支付成功,但调用库存服务时失败,就可能出现产品超卖的情况(订单数大于库存数)。这种场景下,一般在技术设计上会有相应的事件补偿和回调机制,来确保各方数据的一致性。


针对这个问题作为测试,需要了解这些机制的触发条件,并验证是否合理。同时,在设计测试用例时,需要关注跨系统的数据一致性验证,不能只关注自己测试的服务。


错误信息的排查:在单体架构中,当业务发生错误时,我们直接查看业务日志文件即可发现问题。但是在微服务的场景下,测试人员往往无法判断是哪个服务发生了错误,不可能每个组件一个个找过去。这就需要有统一的日志存储服务来处理。常见的技术实现是ELK平台(Elasticsearch、Logstash 和 Kibana组合),更友好的,可能还会有链路跟踪系统(OpenTracing或者SkyWalking)。在这方面,测试能做的不多,更多的是依赖基础技术的沉淀(不要想着自己搞定,因为这些或多或少都会入侵业务代码,还可能影响性能)。


异步服务的验证:在微服务的架构体系中,为了更好地服务解耦,会引入MQ之类的异步服务组件,同时还能起到削峰填谷的作用。这类组件并不好测试。在制定测试策略时,需要了解MQ的选型,关注组件的消费速度、消息不被错误的消费等问题。

 

03


以上,就是基于微服务架构下的一些常见测试策略。技术架构会随着业务的复杂度不断的演进,微服务的拆分也不是一蹴而就。所以,在制定测试策略时,也需要做到可演进。


当架构刚开始拆分时,我们可以直接按单体架构的测试策略进行测试;


当微服务数量较多时,我们只需要关注重点微服务的连通性、可用性及数据一致性;


当微服务数量达到非常多时,我们需要引入熔断降级机制,并建设统一的日志管理平台;


当微服务数量多到我们反应不过来时,会有更多的验证手段被构建出来。


04


做个小的总结,对于微服务架构的测试策略,在业务层,我们可以沿用原来的测试策略,不需要做太多的变化。而对于架构本身带来的新特性,我们需要有针对性的对应措施,整体如下图所示。


640.png


往期推荐:

单体微服务的测试策略

你还记得测试策略么

多版本并行,测试如何做好质量保障?

为什么不选JMeter做接口测试?

敏捷测试系列文章合集


相关文章
|
14天前
|
敏捷开发 监控 测试技术
软件测试中的敏捷实践:提升效率与质量的双重策略
在快速迭代的软件研发环境下,敏捷测试以其灵活性和高效性成为提升产品质量的关键因素。本文深入探讨了敏捷测试的核心理念,并结合具体案例分析,揭示如何在软件开发周期内实现持续的质量监控,以及如何通过自动化测试工具和团队协作提高测试效率。文章旨在为读者提供一套实用的策略和方法,以适应不断变化的市场需求,确保软件项目的成功交付。
36 3
|
4天前
|
运维 监控 测试技术
漫谈测试策略
本文以团队内约定俗成的测试策略概念为主题,总结了一些个人经验和思考结论,可能对其他业务/团队而言,存在术语定义不一致,希望对大家有参考意义,欢迎探讨,感谢理解。
|
1天前
|
网络协议 网络安全 Python
电脑中 TCP/UDP 端口是否开放的测试:令人意想不到的神奇策略等你发现!
【8月更文挑战第19天】在网络管理和维护中,常需确认TCP/UDP端口是否开放以确保服务运行顺畅。端口如同计算机对外通信的“门”,TCP提供可靠连接,UDP则快速但无连接。测试端口是否开放的方法多样:可用`telnet`测试TCP端口,如`telnet localhost 80`;UDP测试较复杂,可用`nc`工具,如`nc -u -z localhost 53`。此外,也有在线工具可供选择,但需确保其安全性。
|
7天前
|
测试技术
探索软件测试的奥秘:如何构建有效的测试策略
在软件开发的海洋中,测试是确保航船不沉没的灯塔。本文将带你领略测试的魅力,从基础概念到高级策略,我们将一起航行在软件测试的广阔海域,探寻那些隐藏在代码深处的秘密。准备好了吗?让我们启航吧!
21 1
|
11天前
|
安全 测试技术 UED
探索软件测试的艺术:从基础到高级策略
在数字化时代的浪潮中,软件测试不仅是保障产品质量的守门人,也是推动技术创新的催化剂。本文将带领读者穿越软件测试的丛林,从基础的概念理解到高级的测试策略,揭示如何通过精准的测试实践来优化产品性能和用户体验。我们将一起探索自动化测试的魅力,性能测试的挑战,以及安全测试的重要性,最终实现从测试新手到专家的华丽转变。
18 2
|
13天前
|
Prometheus 监控 Java
微服务架构下的服务治理策略:打破服务混乱的惊天秘籍,开启系统稳定的神奇之门!
【8月更文挑战第7天】微服务架构将应用细分为可独立部署的小服务,提升灵活性与可扩展性。但服务增多带来治理挑战。通过服务注册与发现(如Eureka)、容错机制(如Hystrix)、监控工具(如Prometheus+Grafana)、集中配置管理(如Spring Cloud Config)和服务网关(如Zuul),可有效解决这些挑战,确保系统的高可用性和性能。合理运用这些技术和策略,能充分发挥微服务优势,构建高效应用系统。
27 1
|
14天前
|
测试技术 持续交付
探索式测试:一种高效且灵活的软件质量保证策略
在快速迭代和持续交付的软件开发环境中,传统的测试方法往往难以应对日益增长的测试需求。探索式测试作为一种灵活而高效的测试实践,强调测试人员的个人技能和经验,鼓励在测试过程中不断探索和学习。本文将介绍探索式测试的核心概念、实施步骤以及如何将其与传统测试方法相结合,以提升软件质量和测试效率。
|
15天前
|
敏捷开发 设计模式 JSON
自动化测试中的代码复用策略
【8月更文挑战第5天】在软件测试的世界中,自动化测试的高效性与代码的复用性息息相关。本文将深入探讨如何在自动化测试中实施代码复用的策略,包括模块化、封装以及数据驱动测试等方法。通过具体的代码示例,我们将展示如何将这些策略应用到实际的测试框架中,以提升测试代码的可维护性和扩展性。
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
探索软件自动化测试的未来:AI驱动的测试策略
【7月更文挑战第47天】 随着人工智能(AI)技术不断进步,其在软件测试领域的应用也日益广泛。本文将探讨如何整合AI技术与现有的自动化测试流程,提出一个面向未来的测试策略。文章重点分析了AI在测试用例生成、执行、结果分析和持续集成中的作用,同时预测了这种技术融合对测试工程师角色的影响,以及它如何提高软件测试的效率和准确性。
|
5天前
|
Kubernetes 监控 Java
发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
18 0