带有服务器发送事件的 JMeter 并行请求

Posted

技术标签:

【中文标题】带有服务器发送事件的 JMeter 并行请求【英文标题】:JMeter parallel requests with server-sent-events 【发布时间】:2016-11-30 03:06:53 【问题描述】:

我有一个 JMeter 测试,我目前正在使用循环来确定某些条件是否为真。我想(并且可以)对发送服务器发送事件(SSE)的资源使用请求,而不是轮询。它应该工作的方式是启动 SSE 线程,然后启动另一个线程,该线程执行最终将导致发送特定事件的请求。如果收到该事件,则应继续处理。

图形可能更清楚。我当前的脚本如下所示:

ThreadGroup
 |
 + request 1
 + request 2
 ...
 + request N
 + Transaction controller
 |  |
 |  + While controller
 |     + polling request
 |
 + request N+1

我想要这样的东西

ThreadGroup
 | 
 + request 1
 + request 2
 ...
 + <help needed here>
 |  |
 |  + event thread
 |  |   + request SSE
 |  |       + onEvent x: y = true
 |  + action thread
 |     + request N
 |     + While y=false wait
 + request N+1

这可能吗?如果有怎么办?如果没有,我可以创建一个采样器来执行此操作吗?有什么指点吗?

格罗滕,

弗里索

【问题讨论】:

【参考方案1】:

我认为你必须实现自己的类。

首先,作为上交所的客户,你应该看看这个:

https://jersey.java.net/documentation/latest/sse.html#d0e11970

第二步是实现一个自定义的采样器来扩展这个类:

https://jmeter.apache.org/api/org/apache/jmeter/protocol/java/sampler/AbstractJavaSamplerClient.html

并将它与这个 GUI 一起使用:

http://jmeter.apache.org/usermanual/component_reference.html#Java_Request

现在最复杂的部分(也许我们应该创建一个 github 项目来讨论这个实现,并在完成后将其贡献给核心 JMeter 项目:-)):

SSESampler 采样器可以在 2 种模式下工作: 阻塞直到它收到服务器的响应,这样你就可以断言结果 启动一个线程(最好使用线程池或反应堆模式)来监听服务器,一旦它得到响应,我们必须找到一种方法让初始线程能够访问它并断言。我们可以使用线程安全的 Map 共享,其中数据将由传递给 SSESampler 的一些数据作为键

这些只是初步的想法,需要更多的工作。

【讨论】:

github.com/vrolijken/JMeter-SSE 我最初的想法。我有工作的 SSE 客户端代码,所以这部分肯定不是问题。【参考方案2】:

在考虑为jmeter创建新的sse插件后,我发现gatling.io,它支持SSE gatling.io

【讨论】:

以上是关于带有服务器发送事件的 JMeter 并行请求的主要内容,如果未能解决你的问题,请参考以下文章

带有命名管道的 WCF:如何允许并行调用?

jmeter测试TCP服务器/模拟发送TCP请求

使用带有nodejs的服务器发送事件并做出反应的问题

jmeter ---模拟http请求/发送gzip数据

如何使用jMeter发送两个逻辑上相关的HTTP请求

如何使用jMeter发送两个逻辑上相关的HTTP请求