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

JMeter parallel requests with server-sent-events

我有一个 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

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

格罗滕,

弗里索

我想你必须自己实现 class。

首先,作为SSE的客户,你应该看看这个:

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

并将其与此 GUI 一起使用:

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

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

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

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