微服务的测试策略

本文涉及的产品
服务治理 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做接口测试?

敏捷测试系列文章合集


相关文章
|
9天前
|
敏捷开发 人工智能 Devops
探索自动化测试的高效策略与实践###
当今软件开发生命周期中,自动化测试已成为提升效率、保障质量的关键工具。本文深入剖析了自动化测试的核心价值,探讨了一系列高效策略,包括选择合适的自动化框架、设计可维护的测试脚本、集成持续集成/持续部署(CI/CD)流程,以及有效管理和维护测试用例库。通过具体案例分析,揭示了这些策略在实际应用中的成效,为软件测试人员提供了宝贵的经验分享和实践指导。 ###
|
8天前
|
人工智能 前端开发 测试技术
探索软件测试中的自动化框架选择与优化策略####
本文深入剖析了当前主流的自动化测试框架,通过对比分析各自的优势、局限性及适用场景,为读者提供了一套系统性的选择与优化指南。文章首先概述了自动化测试的重要性及其在软件开发生命周期中的位置,接着逐一探讨了Selenium、Appium、Cypress等热门框架的特点,并通过实际案例展示了如何根据项目需求灵活选用与配置框架,以提升测试效率和质量。最后,文章还分享了若干最佳实践和未来趋势预测,旨在帮助测试工程师更好地应对复杂多变的测试环境。 ####
30 4
|
14天前
|
机器学习/深度学习 前端开发 测试技术
探索软件测试中的自动化测试框架选择与优化策略####
本文深入探讨了在当前软件开发生命周期中,自动化测试框架的选择对于提升测试效率、保障产品质量的重要性。通过分析市场上主流的自动化测试工具,如Selenium、Appium、Jest等,结合具体项目需求,提出了一套系统化的选型与优化策略。文章首先概述了自动化测试的基本原理及其在现代软件开发中的角色变迁,随后详细对比了各主流框架的功能特点、适用场景及优缺点,最后基于实际案例,阐述了如何根据项目特性量身定制自动化测试解决方案,并给出了持续集成/持续部署(CI/CD)环境下的最佳实践建议。 --- ####
|
11天前
|
测试技术 持续交付 Docker
探索软件测试中的自动化策略与挑战
在当今快节奏的软件开发周期中,自动化测试已成为提高产品质量和缩短上市时间的关键。然而,实施有效的自动化测试策略并非易事,它面临着技术选型、脚本维护、环境配置等一系列挑战。本文深入探讨了自动化测试的重要性,分析了常见的自动化测试工具和框架,并讨论了在构建和维护自动化测试体系过程中遇到的主要难题及其解决方案。通过案例分析,本文旨在为软件测试工程师提供实用的指导和建议,以优化他们的自动化测试实践。
|
8天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
33 5
|
12天前
|
存储 NoSQL 分布式数据库
微服务架构下的数据库设计与优化策略####
本文深入探讨了在微服务架构下,如何进行高效的数据库设计与优化,以确保系统的可扩展性、低延迟与高并发处理能力。不同于传统单一数据库模式,微服务架构要求更细粒度的服务划分,这对数据库设计提出了新的挑战。本文将从数据库分片、复制、事务管理及性能调优等方面阐述最佳实践,旨在为开发者提供一套系统性的解决方案框架。 ####
|
10天前
|
Kubernetes 负载均衡 Cloud Native
云原生架构下的微服务治理策略
随着云原生技术的不断成熟,微服务架构已成为现代应用开发的主流选择。本文探讨了在云原生环境下实施微服务治理的策略和方法,重点分析了服务发现、负载均衡、故障恢复和配置管理等关键技术点,以及如何利用Kubernetes等容器编排工具来优化微服务的部署和管理。文章旨在为开发者提供一套实用的微服务治理框架,帮助其在复杂的云环境中构建高效、可靠的分布式系统。
26 5
|
10天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型浪潮中,企业纷纷拥抱云计算,而云原生架构作为其核心技术支撑,正引领着一场深刻的技术变革。本文聚焦于云原生环境下微服务架构的治理策略与实践,探讨如何通过精细化的服务管理、动态的流量调度、高效的故障恢复机制以及持续的监控优化,构建弹性、可靠且易于维护的分布式系统。我们将深入剖析微服务治理的核心要素,结合具体案例,揭示其在提升系统稳定性、扩展性和敏捷性方面的关键作用,为读者提供一套切实可行的云原生微服务治理指南。 ####
|
15天前
|
缓存 负载均衡 监控
微服务架构下的接口性能优化策略####
在当今快速迭代的软件开发领域,微服务架构以其灵活性和可扩展性成为众多企业的首选。然而,随着系统复杂性的增加,接口性能问题日益凸显,成为制约用户体验与系统稳定性的关键因素。本文旨在探讨微服务架构下接口性能优化的有效策略,通过具体案例分析,揭示从代码层面到系统架构层面的全方位优化路径,为开发者提供实战指南。 ####
|
15天前
|
消息中间件 数据库 云计算
微服务架构下的数据库事务管理策略####
在微服务架构中,传统的单体应用被拆分为多个独立的服务单元,每个服务维护自己的数据库实例。这种设计提高了系统的可扩展性和灵活性,但同时也带来了分布式环境下事务管理的复杂性。本文探讨了微服务架构下数据库事务的挑战,并深入分析了几种主流的事务管理策略,包括Saga模式、两阶段提交(2PC)以及基于消息的最终一致性方案,旨在为开发者提供一套适应不同业务场景的事务处理框架。 ####