Jmeter 动态 JMS 队列名称值不会从 CSV 数据配置中更新

Posted

技术标签:

【中文标题】Jmeter 动态 JMS 队列名称值不会从 CSV 数据配置中更新【英文标题】:Jmeter Dynamic JMS queue name values are not updated from CSV Data Config 【发布时间】:2021-12-29 08:41:00 【问题描述】:

我正在尝试使用 Jmeter JMS 执行性能测试,我有一个 csv 文件以表格形式提供测试数据 APPLICATIONAME,SEND_QUEUE,RECV_QUEUE,MSG_TO_SEND 我有大约 300-400 条消息,我的测试计划如下所示

我已经尝试设置属性变量 tqueue_get, tqueue_put 遵循以下帖子 JMeter JMS point to point sampler not taking parameters

的建议

奇怪的是,当我检查日志时,我可以在调试采样器中看到变量 tqueue_get 和 tq​​ueue_put 设置正确,但 JMS 测试采样器要么采用错误的队列名称(好像读取了上一行或其他内容),要么像下面这样根本没有名字

有人能指出我正确的方向吗?

【问题讨论】:

【参考方案1】:

根据JSR223 Sampler 文档:

JSR223 测试元素有一个特性(编译)可以显着提高性能。要从此功能中受益:

使用脚本文件而不是内联它们。如果此功能在 ScriptEngine 上可用,这将使 JMeter 编译它们并缓存它们。 或使用脚本文本并检查缓存已编译的脚本(如果可用)属性。

使用此功能时,请确保您的脚本代码不直接在脚本代码中使用 JMeter 变量或 JMeter 函数调用因为缓存只会缓存第一个替换。而是使用脚本参数。

所以将您的 __setProperty() function 电话替换为以下内容:

props.put('tqueue_put', vars.get('mq_queue_put'))
props.put('tqueue_put', vars.get('mq_queue_get'))

有关这些propsvars 和其他简写的更多信息,请参阅Top 8 JMeter Java Classes You Should Be Using with Groovy

还要注意属性是全局的,因此在并发的情况下,2 个线程将写入同一个队列,因此您可能需要添加 current thread number 作为属性前缀或后缀

【讨论】:

以上是关于Jmeter 动态 JMS 队列名称值不会从 CSV 数据配置中更新的主要内容,如果未能解决你的问题,请参考以下文章

jmeter 建立一个JMS点对点测试计划

Wildfly10中JMS队列的JNDI名称格式

jmeter 建立一个JMS主题测试计划

在Jmeter JMS点对点采样器中使用通信样式“清除”

JMS 和 Weblogic 集群

Apache ActiveMQ - 检索 JMS 指标