如何在 Jmeter 中处理不同 IBM MQ 队列上异步消息的性能测试(和报告)?

How can the performance testing (and reporting) of Async messages over different IBM MQ queues be handled in Jmeter?

我需要测试在一个“入站”MQ1 上发送然后稍后(经过一些处理后)在另一个出站 MQ2 上接收的消息的性能。 我需要以某种方式生成类似于 Jmeter 中的聚合报告侦听器的报告,以显示平均“响应时间”或“处理时间”(即具有给定唯一 ID 的消息被放置在入站队列上与从不同的出站 MQ 消费了具有相同唯一 ID 的不同消息)和吞吐量。 我相信这属于异步类别。

我有一些 Jmeter 经验和有限的脚本知识 - 我希望使用这个工具来解决我使用 inter-thread-communication-plugin-in-jmeter 的问题。

this and this 篇文章中示例和评论的启发, 我目前的高级方法是让一个线程组使用带有 groovy 代码的 JSR223 采样器控制入站队列中的消息插入,另一个线程组控制来自另一个出站队列的消息的消耗。 我已经设置了脚本来放置和使用消息,但是我很难实现将信息从一个线程移动到另一个线程的部分,并且只有当它包含唯一时才“有条件地”使用来自出站队列的消息我正在寻找基于第一个线程组生成的变量的消息。如果在 4 秒内未找到消息 ID,我想抛出一个断言并使采样器失败。

在 Jmeter 中,我在测试计划元素中定义了一个“消息”变量。 在 JSR223 采样器中,我使用 vars.put("message", payload) 在将消息内容发送到入站队列之前获取消息内容(使用 producer.send(msg)),然后在 Jmeter“响应”中使用它断言”与“文本消息”选择和“不等于”只是为了执行此模式 ${__fifoPut(input_queue,${message})} 它将消息值放入 FIFO“input_queue”(线程间通信插件在 jmeter 中)。

现在,一旦我将此消息放入 FIFO 队列中,在使用出站队列中的消息的 2nd Tread 中,我需要一些方法来调用 ${__fifoPop(input_queue,$ {message})} 在脚本中(这在 JSR223 采样器中不起作用)但前提是消息的内容具有我正在寻找的消息 ID,以便将 queue1 上的第一条消息与其中一条消息映射来自队列 2。但是在脚本中,我使用 consumer.receive(1000) 方法直接使用消息,从而将其从队列中删除。有什么方法可以只从队列中读取消息而不使用它们吗?

问题总结:

  1. 我的第一个问题是解决线程1发送到MQ1的一条消息与线程2从MQ2消费的另一条消息的同步问题。
  2. 第二个问题是如何计算一条消息被放置在MQ1上与相应的相同消息被received/consumed放置在MQ2上的时间差。
  3. 第三个问题是如何以与Jmeter 中的汇总报告相同的方式显示此信息。我需要证明某条消息已发送,并且在系统负载下的 x 秒内 received/consumed + 计算每秒事务的吞吐量。

有谁知道我该如何解决这些问题?

  1. 鉴于您正在测试“异步”系统,为什么需要“同步”?如果你想确保你正在阅读初始消息的延续,你可以考虑使用 JMS Correlation ID for this
  2. 用于确定“第一条”消息的时间戳的 IBM MQ testing with JMeter - Learn How (referenced by you, by the way) suggests using JMS_IBM_PUTDATE and JMS_IBM_PUTTIME 属性
  3. 鉴于您在当前时间和发送第一条消息的时间之间有时间戳增量,您可以通过 SampleResult class 实例在第二个线程组中配置 JSR223 采样器,这样它就不会报告它的自己的执行时间,但 JMS_IBM_PUTTIME 和当前时间之间的差值。完成后,您可以仅将此第二个 JSR223 采样器包含在负载测试报告中