一篇文章带你了解如何测试消息队列

news/2024/11/8 11:41:39/文章来源:https://www.cnblogs.com/starstarstar/p/18534765

是什么

  探讨消息队列的测试,那首先就要了解消息队列是什么。
  消息队列是一种应用程序之间传递消息的异步通信机制。这里传递的消息指的是需要传输的数据,可以是一些文本、字符串或对象等信息。
简述一下消息队列工作模式:

  1. 消息的生产者将数据存放到消息队列中,消费者进行接收处理。生产者和消费者分开,彼此不受影响
  2. 消息被储存在消息队列中,消息队列把数据进行持久化直到它们已经被完全处理,确保消息传递的可靠性和顺序性
  3. 消息队列可以有多个消费者,提高系统处理能力,支持快速水平扩展

用哪里

  根据消息队列的特性,消息队列有以下几种最常用的应用场景。

异步处理

  非实时的业务场景,可以采用异步处理来提高系统的吞吐量和响应时间。

系统解耦  

  通过消息队列,可以将不同系统或模块之间的依赖关系解除,使得它们可以独立地进行开发和部署。
  消息队列能够隔离故障,当某个系统发生故障时,不会影响到其他服务,提高了系统的整体稳定性。

限流削峰  

  在大促、秒杀等活动中,瞬时流量可能会非常大,业务系统直接处理,就会压力太大就会导致大量系统异常,业务失败甚至系统崩溃。通过将请求信息保存到消息队列中,将压力转移到MQ中,并由后端服务异步处理这些存储在消息队列中的消息,可以有效地缓解系统压力。

怎么测

测试前:技术方案评审

  QA在参与RD的技术方案评审中,就需要考虑以下三点:要不要用;用的地方合不合适;用哪款

要不要用消息队列

  在系统设计中,需不需要使用消息队列,可以参考上文提到的消息队列最常用的应用场景中的一些场景。比如系统需要处理大量并发的请求,并且请求处理时间比较长,就可以使用消息队列进行一步处理。又或者系统多个模块之间需要通信,但是又不希望相互之间之间调用接口或者方法,就可以使用消息队列进行解耦。

  当然,使用消息队列也会有一些挑战。
  首先就是数据一致性的问题,数据一致性也是测试的一项重点。消费的重复消费、消息丢失、分布式系统中消息事务性和数据库操作一致性都会带来数据一致性的挑战。其次系统中使用消息队列是也会增加系统维护复杂性,同时也会增加一定的成本支出。
在实际的技术设计中,需要具体根据实际的业务场景判断是否使用消息队列。

消息队列应用的场景是否合理 

  在技术评审中,QA要根据实际的业务场景,思考设计方案中的消息队列中使用场景是否合理。

使用的消息队列产品是否合理

  消息队列也有不同的产品,我们在使用消息队列时,也需要根据我们的业务场景选择合适的场景。常用的消息队列产品有三类,分别是基于内存的消息队列、基于磁盘的消息队列、分布式消息队列。

Kafka适合大规模数据处理,RabbitMq适合轻量级应用,等等。具体可以根据自己的业务特性来选择。

测试中:业务中测试

是否能传达

消息发送

  • 不同类型(如文本、字符串、二进制数据等)的消息能否成功发送到队列
  • 消息属性的是否生效,比如过期时间
  • 消息发送频率控制,验证系统能否处理高频率的消息发送

消息接收

  • 消息队列的连接测试
  • 消息接收的确认
  • 消息接收的顺序性

是否能正常传达

消息的重发机制

  • 消息重发机制:故意使消费者接收消息失败,检查消息队列是否能够自动重发消息
  • 参数设置是否有效:测试重发次数、重发间隔等参数的设置是否有效
  • 幂等性处理,为防止消息重复处理,系统需实现幂等性,确保消息多次重发不会影响业务逻辑。

消息的防丢失验证

  • 消息队列应确保消息在系统重启后能够从存储中恢复,保证消息不丢失
  • 摸拟故障场景,验证消息队列在系统故障后能否正确恢复消息状态,保证数据一致性

是否能高性能传达

吞吐量

  • 消息处理速率:衡量消息队列在单位时间内能处理的消息数量,反映系统处理消息的能力。
  • 并发用户:测试在不同并发用户数下,消息队列的吞吐量表现,确保系统稳定运行。
  • 系统资源占用:监控在高吞吐量下系统资源(如 CPU、内存)的使用情况,评估资源效率。

延迟处理

  • 在不同压力下,消息从发送到被处理的平均时间,确保有消息队列的链路能满足整个系统的需要
  • 网络传输延迟,消息在不同网络条件下,测试从发送端到接收端的延迟时间,从而评估网络对消息队列的影响
  • 在高负载的压力下,测试消息队列的延迟,确保高压力下系统的稳定性

可扩展性测试

  • 水平扩展
    •   在高负载情况下,增加消息队列的节点数量,测试系统的性能和吞吐量能否线性提升
  • 垂直扩展
    •   提升单个节点的硬件资源,观察消息队列的性能变化

是否能安全传达

  • 数据加密
    •   选择合适的加密算法,既能确保数据传输和存储的安全性,又能不过多消耗资源
    •   消息防篡改,验证消息在传输和存储过程中是否能够防止被篡改
  • 访问控制
    •   权限和角色控制,被授权的用户和角色才能访问消息队列资源

测试后:监控报警配置

  在上线之前,为确保系统稳定运行,需与研发(RD)及产品团队紧密协作,统一报警配置,并制定详尽的紧急情况应对标准操作流程(SOP)。此过程中,质量保障(QA)团队将负责核对监控报警系统,确保已配置与消息队列相关的监控项及报警机制,并验证其有效性。监控内容应全面覆盖,包括但不限于消息队列的每秒查询率(QPS)、服务器的性能指标等关键信息。针对这些监控指标,QA团队和RD团队协作需合理设定阈值,并配置相应的报警规则,以便及时发现并响应潜在问题。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/828757.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS 2022 不支持 .NET Framework 4.5 项目解决办法(Visual Studio 2022)

VS 2022 不支持 .NET Framework 4.5 项目解决办法(Visual Studio 2022) 概述 最近 C# 开发工具 Visual Studio 升级到了 2022,打开速度快了很多,开发体验也舒服很多。只是使用过程中遇到了一个比较尴尬的问题:默认Visual Studio 2022 不再支持安装 .NET Framework 4.5 组件…

新建流程隐藏指定流程(建模+api+ecode)

ecode代码 `// 功能总开关 let enable = true; let list=[]; $.ajax({ type:GET, url:/api/xiangxin/Multiple/HideProcess, success:function(res){ res.data.map((i)=>{ // console.log(lc :, i.lc); list.push(i.lc); }) } }) let pd; //判断是否是新建流程页面 ecodeSDK…

分布式事物传递 NetMQ测试

using NetMQ; using NetMQ.Sockets; using System; using System.Threading; namespace 消息传递库_NetMQ服务端 {internal class Program{public static void Main(){using (var publisher = new PublisherSocket()){// 绑定到一个端口,等待订阅者连接publisher.Bind("t…

Java实现身份证OCR识别API

近年来,随着业务量的不断增加,人工录入方式越来越难以满足高效办理业务的需求,而且越来越多的移动 APP涉及到个人身份证信息的实名认证,为了提高在移动终端上输入身份证信息的速度和准确性,一种可以识别并提取身份证上文字信息的技术接口应运而生,即身份证 OCR 识别 API …

调试优科R750 无线AP

最近项目上用到几个优科的R750设备,头一次整 一头雾水,还是英文太差了。其实官网上有许多手册,也有社区。 先是打了RUCKUS官网上的400电话,全是英文,没有办法找集成商要了销售的微信,他们介绍了一个技术,用微信给我传了一个升级固件(R750-200.9.10.4.233.bl7);后来我…

LeetCode 2544[交替数字和]

LeetCode 2544[交替数字和]题目 链接 LeetCode 2544[交替数字和] 详情实例提示题解 思路 依次求出各位数字,然后进行计算 循环找出各位数字:(循环体如下)将数字对10取余得到对应位数的数字,加入到容器 numVec数字除以10,得到新的数字,此数字是不包含已获取数字的位数 循…

Ubuntu系统下载

推荐LTS长期支持版本 下载地址 Ubuntu Releases至于下边这个网站,不推荐用,很可能下载到beta之类的版本 Index of /releases

人工智能入门

确定性计算,符号主义(早期人工智能) 不确定性计算:建模、机器学习(世界的随机性、不确定性和动态性 - 需要模式识别(学习)的能力,从数据中总结规律)智能即学习。人类的学习,是有类比思维的,得出方法论、哲学;机器的学习,只是在训练特征参数,没有灵性。机器学习常…

iOS-Tagent上新了,iOS17的wda的部署小技巧你get了吗

iOS17以上设备的wda安装小技巧来啦!快来get这个小技巧吧!感兴趣的同学可以戳推文详细阅读~此文章来源于项目官方公众号:“AirtestProject” 版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途一、前言 之前有很多同学一直在问如何在iOS17的设备上安装wda…

antd Select下拉项数据过多,偶现下拉面板空白

问题 如下,偶现点击选择框,下拉面板空白(数据确定已返回)解决 查看github中的issues发现其他人也有同样的问题,大概是和 virtual list 有关 https://github.com/ant-design/ant-design/issues/26116修改代码如下: <Select...其他属性virtual={false} />

Qt 窗口强制禁用系统阴影(自定义菜单)

解决方法 当只使用Qt::FramelessWindowHint时,不会显示系统阴影,因为自定义菜单一般都会添加Qt::Popup,添加Qt::Popup后系统会默认添加阴影效果。 在添加Qt::Popup后,继续添加Qt::NoDropShadowWindowHint枚举解决。最小复现代码:QDialog *dia = new QDialog();dia->set…

CJ/T188 调试工具介绍

官网下载地址:CJ/T 188 主站模拟器 功能介绍 #可用于任何厂商生产的符合 CJ/T188 标准的电能表。 支持通过串口和 TCP 连接 CJ/T188 设备。 支持 CJ/T188-2004/2018 协议。 同时与多个水表通信。 快速读取与写入数据,以表格形式展示,包含数据标识描述。 完善且人性化的界面设…