【发布时间】:2021-12-13 05:26:04
【问题描述】:
我有一个设置了 2 个队列的远程 IBM MQ 实例。在它们后面是一个被测系统,它总是拾取放在 INBOUND.QUEUE 上的消息”进行一些处理并将响应消息放在“OUTBOUND.QUEUE”上。
我想测试这个 SuT 的响应时间。为了实现这一点,我需要设置这个场景:
- JMeter 将一些 ID 为 1 的消息发送到名为“INBOUND.QUEUE”的队列
- 被测系统从“INBOUND.QUEUE”获取消息,进行一些处理并将响应放在“OUTBOUND.QUEUE”上
- JMeter 检查并断言已在 X 秒内收到对名为“OUTBOUND.QUEUE”的队列中 ID1 的消息的响应
- 在聚合报告侦听器中查看响应时间结果
在 JMeter 中,我的设置与 article 中描述的设置非常相似,如果我的理解正确,则使用带有 groovy 代码的 JSR223 测试元素与 IBM MQ 队列交互 - 通过 JMS。与文章的不同之处在于,为了使用出站队列中的消息,我有另一个 setUp Thread Group 为“OUTBOUND.QUEUE”设置另一个连接,我从中使用消息,另一个 tearDown Thread Group 关闭此连接最后。
到目前为止它工作正常,但它盲目地消费消息,我需要确保我正在阅读(消费)每个初始消息的响应延续,以便我可以计算每个完整请求的 SuT 的响应或处理时间-响应流。 我知道我可以为此目的使用JMS Correlation ID,但我不知道如何。
-
我可以在消息创建和消费时使用什么方法来获取此 Correlation ID?
-
我是否需要一些数据结构来在消息创建时放置所有相关 ID,以便我可以设置一个条件,如 IF msg.getStringProperty("JMS_CorreationID") 是生成的 ID 列表中,从这个数据结构中删除它,然后获取 JMS_IBM_PUTTIME 属性来确定“第一条”消息的时间戳,最后计算当前时间与第一条消息的时间之间的时间戳增量?
-
一旦我这样做了,我如何通过SampleResult 类实例在第二个线程组中配置 JSR223 采样器(消费者),这样它就不会报告自己的执行时间,而是 JMS_IBM_PUTTIME 和当前时间之间的增量(即将代表处理时间)?
-
最后,一旦完成,我如何才能在负载测试报告中只包含这个 2nd JSR223 Sampler (Consumer)?
这个逻辑是否正确/太复杂? 任何帮助或一些代码示例将不胜感激。
【问题讨论】:
标签: groovy jmeter jms performance-testing ibm-mq