如何通过 IBM MQ 使用 JMS 点对点消息传递模型测量 SuT 的响应(处理)时间?
How can I measure the response (processing) times of a SuT using JMS Point-to-Point messaging model through IBM MQ?
我有一个设置了 2 个队列的远程 IBM MQ 实例。在它们后面是一个被测系统,它总是拾取放在 INBOUND.QUEUE 上的消息,并进行一些处理并在“OUTBOUND.QUEUE”上放置一条响应消息。
我想测试一下这个 SuT 的响应时间。为此,我需要实施以下方案:
- JMeter 将 ID1 的一些消息发送到名为“INBOUND.QUEUE”的队列中
- 被测系统从“INBOUND.QUEUE”获取消息,进行一些处理并将响应置于“OUTBOUND.QUEUE”
- JMeter 检查并断言已在 X 秒内收到对名为“OUTBOUND.QUEUE”的队列中 ID1 的消息的响应
- 在聚合报告侦听器中查看响应时间结果
在 JMeter 中,我的设置与 article, using JSR223 test elements with groovy code to interact with the IBM MQ Queues - through JMS 中描述的非常相似,如果我的理解是正确的话。与文章的不同之处在于,为了使用来自出站队列的消息,我有另一个 setUp 线程组,它为我使用消息的“OUTBOUND.QUEUE”设置另一个连接,另一个 tearDown 线程组关闭这个连接在最后。
在高层次上,我的设置如下所示:
它到目前为止有效,但它盲目地使用消息,我需要确保我正在读取(使用)每个初始消息的响应延续,以便我可以计算每个 SuT 的响应或处理时间完整的请求-响应流程。
我知道我可以使用 JMS Correlation ID 来达到这个目的,但我不知道如何使用。
我可以使用什么方法在消息创建和消费时获取此 Correlation ID?
我是否需要一些数据结构来在消息创建时放置所有关联 ID,以便我可以放置像 IF msg.getStringProperty("JMS_CorreationID") 这样的条件是 IN 生成的 id 列表,将其从该数据结构中删除,然后获取 JMS_IBM_PUTTIME 属性 以确定“第一条”消息的时间戳,最后计算当前时间与当前时间之间的时间戳增量第一条消息的时间?
一旦我这样做了,我如何通过 SampleResult class 实例在第二个线程组中配置 JSR223 采样器(消费者),这样它就不会报告它自己的执行时间但 JMS_IBM_PUTTIME 和当前时间(代表处理时间)之间的差值?
最后,一旦完成,我如何才能将这个第二个 JSR223 采样器(消费者)包含到负载测试报告中?
这个逻辑correct/too复杂吗?
任何帮助或一些代码示例将不胜感激。
通常你应该只问一个问题 post,我认为没有人愿意写一本书来回答你所有的问题(并为你做你的工作免费)
- 如果您想使用 JMS 关联 ID,您需要在消费者中显式调用 Message.setJMSCorrelationID() function in the producer and correspondingly read it as Message.getJMSCorrelationID()
- 是的,您可以使用 Inter-Thread Communication Plugin or
props
shorthand for JMeter Properties class 实例
- 您可以使用 JSR223 PostProcessor,将其添加为 JSR223 采样器的子级并使用
prev.elapsedTime = 123456
,将 123456
替换为具有给定相关性的已发送消息和已接收消息之间的实际增量编号
- 您可以使用
SampleResult.setIgnore()
函数,这样您调用该函数的JSR223 Sampler既不会显示在监听器中,也不会显示在.jtl结果文件中。
我有一个设置了 2 个队列的远程 IBM MQ 实例。在它们后面是一个被测系统,它总是拾取放在 INBOUND.QUEUE 上的消息,并进行一些处理并在“OUTBOUND.QUEUE”上放置一条响应消息。
我想测试一下这个 SuT 的响应时间。为此,我需要实施以下方案:
- JMeter 将 ID1 的一些消息发送到名为“INBOUND.QUEUE”的队列中
- 被测系统从“INBOUND.QUEUE”获取消息,进行一些处理并将响应置于“OUTBOUND.QUEUE”
- JMeter 检查并断言已在 X 秒内收到对名为“OUTBOUND.QUEUE”的队列中 ID1 的消息的响应
- 在聚合报告侦听器中查看响应时间结果
在 JMeter 中,我的设置与 article, using JSR223 test elements with groovy code to interact with the IBM MQ Queues - through JMS 中描述的非常相似,如果我的理解是正确的话。与文章的不同之处在于,为了使用来自出站队列的消息,我有另一个 setUp 线程组,它为我使用消息的“OUTBOUND.QUEUE”设置另一个连接,另一个 tearDown 线程组关闭这个连接在最后。
在高层次上,我的设置如下所示:
它到目前为止有效,但它盲目地使用消息,我需要确保我正在读取(使用)每个初始消息的响应延续,以便我可以计算每个 SuT 的响应或处理时间完整的请求-响应流程。 我知道我可以使用 JMS Correlation ID 来达到这个目的,但我不知道如何使用。
我可以使用什么方法在消息创建和消费时获取此 Correlation ID?
我是否需要一些数据结构来在消息创建时放置所有关联 ID,以便我可以放置像 IF msg.getStringProperty("JMS_CorreationID") 这样的条件是 IN 生成的 id 列表,将其从该数据结构中删除,然后获取 JMS_IBM_PUTTIME 属性 以确定“第一条”消息的时间戳,最后计算当前时间与当前时间之间的时间戳增量第一条消息的时间?
一旦我这样做了,我如何通过 SampleResult class 实例在第二个线程组中配置 JSR223 采样器(消费者),这样它就不会报告它自己的执行时间但 JMS_IBM_PUTTIME 和当前时间(代表处理时间)之间的差值?
最后,一旦完成,我如何才能将这个第二个 JSR223 采样器(消费者)包含到负载测试报告中?
这个逻辑correct/too复杂吗? 任何帮助或一些代码示例将不胜感激。
通常你应该只问一个问题 post,我认为没有人愿意写一本书来回答你所有的问题(并为你做你的工作免费)
- 如果您想使用 JMS 关联 ID,您需要在消费者中显式调用 Message.setJMSCorrelationID() function in the producer and correspondingly read it as Message.getJMSCorrelationID()
- 是的,您可以使用 Inter-Thread Communication Plugin or
props
shorthand for JMeter Properties class 实例 - 您可以使用 JSR223 PostProcessor,将其添加为 JSR223 采样器的子级并使用
prev.elapsedTime = 123456
,将123456
替换为具有给定相关性的已发送消息和已接收消息之间的实际增量编号 - 您可以使用
SampleResult.setIgnore()
函数,这样您调用该函数的JSR223 Sampler既不会显示在监听器中,也不会显示在.jtl结果文件中。