如何使用JMeter与AMQP插件计算RabbitMQ消息往返时间?
用JMeter计算RabbitMQ消息从发布者到消费者的耗时
当然可以实现,以下是具体操作步骤:
1. 给发布的消息嵌入高精度时间戳
别用普通的${__time()},换成纳秒级时间戳保证精度,比如把消息构造成JSON格式,带上发送时间字段:
{ "content": "你的测试内容", "sendTime": "${__time(,)}${__timeNanos(,)}" }
__time()获取秒级时间,__timeNanos()获取纳秒部分,拼起来就是精确到纳秒的完整时间戳,避免高并发下时间戳重复。
2. 消费端提取时间戳并计算耗时
在RabbitMQ消费者Sampler后面添加一个JSR223 PostProcessor,用Groovy脚本处理:
- 从收到的消息里解析出
sendTime字段并转成数字类型 - 获取当前时间的纳秒级时间戳
- 计算时间差值,转成毫秒/微秒后存为JMeter变量,方便后续统计
示例Groovy脚本:
// 解析JSON格式的消息体 def message = new groovy.json.JsonSlurper().parseText(prev.getResponseDataAsString()) def sendTime = Long.parseLong(message.sendTime) def receiveTime = System.nanoTime() // 计算耗时,这里转成微秒(除以1000),也可以转毫秒(除以1000000) def latency = (receiveTime - sendTime) / 1000 // 存为变量,后续用聚合报告等组件统计 vars.put("messageLatency", latency.toString())
3. 统计耗时数据
- 添加聚合报告,在「要统计的额外列」中填入
messageLatency,就能看到该字段的平均值、90%响应时间等统计结果 - 也可以添加图形结果组件,实时查看耗时的变化趋势
注意事项
- 确保发布端和消费端的机器时间同步,否则计算出的耗时会存在误差
- 如果消息体不是JSON格式,调整脚本中的解析逻辑即可,比如按分隔符提取字段
- 高并发场景下建议使用Groovy脚本(性能远优于BeanShell),避免拖慢测试进程
内容的提问来源于stack exchange,提问作者Pittiplatsch
相关产品推荐
相关产品推荐

