我一直在探索使用 Gattle 进行 JMS 测试,作为 AUT 更广泛性能测试的一部分。我已经使用了 https://gadling.io/docs/current/jms/ 中的示例,并成功让 gatling 在我的测试 ActiveMQ 服务器上创建了一个队列,并读取了消息。
但是,实际的 AUT 测试需求表明我们应用程序中的服务将在我们的 ActiveMQ 服务器上创建消息 - 我想要在我的 Gadling 代码中对生成消息的服务进行 REST 调用,然后 Gattle JMS 代码应该接收消息,适当地解析它们,当我找到某个消息时,继续进行下一个测试。
根据上面的加特林链接,“目前支持 requestReply 和发送(即发即忘)请求。”这是否意味着我想做的事情是不可能的?这是否意味着我必须使用加特林创建消息,但不一定寻找回复?
如果可能的话,我想我可以将我一直在玩的示例分成两个单独的执行操作 - 一个发送,一个接收?但如何呢? 谢谢!
这是可行的,我们做到了。出于法律原因,我不能将代码放在这里,但我们就是这样做的。
实现您自己的
HttpToJmsAction
HttpToJmsActionDsl
类。上述操作将进行 API 调用,并将唯一的请求标识符作为 HTTP 标头或某些请求正文内容传递。重要的是,该唯一标识符将作为 JMS 标头或响应正文中的某个位置传播到 JMS 响应。Map
JMSTimestamp
。进行 API 调用后,操作将Map
。重要的是这个循环发生在不同的线程中,因此您不会阻塞进行 API 调用的线程。因为在生成 API 请求时,您知道请求时间并且在响应中具有响应时间Map
HttpToJmsActionDsl
的一部分,您可能需要添加对其他功能的支持,例如
KeyExtractor
、JmsConsumer
等,但这将是您自己设计的一部分。请注意,该解决方案并不完美,我们遇到了负面 KO
的问题。您可以在
我的堆栈溢出问题中阅读相关内容。我们的解决方案是加大超时时间,但不能保证您不会得到任何错误的
KO
s。需要注意的是实现高性能的 JMS 监听器,能够缓存 JMS 连接并增加和减少响应队列中并发消费者的数量。没用说对响应的写访问必须同步。
希望有帮助