使用 JMeter 连续流加载测试 websocket
Load test websocket with continous streaming using JMeter
JMeter 中的 WebSocket 流仅针对一帧执行,我无法使用可用的 jars 加载测试连续流@https://bitbucket.org/pjtr/jmeter-websocket-samplers
Jmeter WebSocket jmx
当我尝试通过终端触发 WebSocket 请求时,它会流式传输 output/logs。但是在 JMeter 的情况下,Websocket 只运行一个帧。
端口 443 的 WSS 请求:
感谢您回答问题。请您消除我的一些疑虑:我正在尝试对客户端持续监听 WebSocket 的场景进行负载测试。
1 Using a jar file I am able to continuously stream the data when I hit the java jar in the terminal. I can see the data flowing
2. Now I try to replicate the scenario in JMeter, the sampler acts like a request/response, where the connection is lost after the response.
3. Now if I set a loop in JMeter, it does not satisfy the purpose of streaming. It will act as multiple requests sent to the same channel.
同样在附图 link 中,流式连接的复选框被选中,但它的作用类似于 request/response。
循环是 WebSocket 流的唯一选择吗?
Thread Name: Thread Group 1-1 Sample Start: 2017-04-27 17:21:40 IST
Load time: 1383 Connect Time: 0 Latency: 0 Size in bytes: 1065 Sent
bytes:0 Headers size in bytes: 0 Body size in bytes: 1065 Sample
Count: 1 Error Count: 0 Data type ("text"|"bin"|""): Response code:
200 Response message:
[Execution Flow]
- Opening new connection
- Using response message pattern ""
- Using disconnect pattern ""
- Waiting for the server connection for 60000 MILLISECONDS
- WebSocket conection has been opened
- Connection established
- Waiting for messages for 60000 MILLISECONDS
- Received frame #1 (15 bytes); matched response pattern
- Received message #2 (15 bytes); matched response pattern
- Leaving streaming connection open
[Variables]
- Message count: 2
[Problems]
Response headers:
SampleResult fields: ContentType: DataEncoding: UTF-8
(我无法评论,第一部分会更合适)
根据您 post 中的文字,您正在使用 https://bitbucket.org/pjtr/jmeter-websocket-samplers,但您 post 编辑的日志记录并非来自该插件,而是来自 Maciej Zaleski 的插件....
我不是 100% 确定 "load test continuous stream" 是什么意思,但如果您的意思是服务器只是将帧推送到客户端,则可以使用前一个插件进行测试。只需使用 "Single read sampler"...
设置一个循环
感谢 Peter 对此主题的回复。
我有一个很相似的use-case,只是想明白一件事:
如果我在“循环”中保留“单读采样器”,是否有可能在循环迭代之间丢失一些消息,或者是否有某种 buffering/streaming 确保在迭代之间消息不会丢失并在下一次“单读采样器”读取时返回?
在此先感谢您的帮助。
更新:
正如 Peter 对此答案的评论所预期的那样,我们确实看到从输入流中一个接一个地读取帧,没有任何丢失。
但是,我们观察到:
- 不同的 WS 读取超时值对读取的影响非常不同
- 对于给定的连接,如果我们预计会收到,比如说 500 条消息,在中间的某个时间,消息不会被 WS 读取(超时 = 7 秒),即使服务器确实推送它(在 18 毫秒内),因此,最终读取计数为 499。可以看出,此行为的极限取决于读取超时(即使消息在超时内被推送)。
以前是否观察到过这种行为?您能想出任何解释来解释为什么会发生这种情况吗?任何关于此的 solution/help 都会有很大帮助,谢谢。
PS:我无法将此添加为评论,因此很抱歉在这里发布查询。
JMeter 中的 WebSocket 流仅针对一帧执行,我无法使用可用的 jars 加载测试连续流@https://bitbucket.org/pjtr/jmeter-websocket-samplers
Jmeter WebSocket jmx 当我尝试通过终端触发 WebSocket 请求时,它会流式传输 output/logs。但是在 JMeter 的情况下,Websocket 只运行一个帧。
端口 443 的 WSS 请求:
感谢您回答问题。请您消除我的一些疑虑:我正在尝试对客户端持续监听 WebSocket 的场景进行负载测试。
1 Using a jar file I am able to continuously stream the data when I hit the java jar in the terminal. I can see the data flowing
2. Now I try to replicate the scenario in JMeter, the sampler acts like a request/response, where the connection is lost after the response.
3. Now if I set a loop in JMeter, it does not satisfy the purpose of streaming. It will act as multiple requests sent to the same channel.
同样在附图 link 中,流式连接的复选框被选中,但它的作用类似于 request/response。
循环是 WebSocket 流的唯一选择吗?
Thread Name: Thread Group 1-1 Sample Start: 2017-04-27 17:21:40 IST Load time: 1383 Connect Time: 0 Latency: 0 Size in bytes: 1065 Sent bytes:0 Headers size in bytes: 0 Body size in bytes: 1065 Sample Count: 1 Error Count: 0 Data type ("text"|"bin"|""): Response code: 200 Response message:
[Execution Flow] - Opening new connection - Using response message pattern "" - Using disconnect pattern "" - Waiting for the server connection for 60000 MILLISECONDS - WebSocket conection has been opened - Connection established - Waiting for messages for 60000 MILLISECONDS - Received frame #1 (15 bytes); matched response pattern - Received message #2 (15 bytes); matched response pattern - Leaving streaming connection open
[Variables] - Message count: 2
[Problems]
Response headers:
SampleResult fields: ContentType: DataEncoding: UTF-8
(我无法评论,第一部分会更合适)
根据您 post 中的文字,您正在使用 https://bitbucket.org/pjtr/jmeter-websocket-samplers,但您 post 编辑的日志记录并非来自该插件,而是来自 Maciej Zaleski 的插件....
我不是 100% 确定 "load test continuous stream" 是什么意思,但如果您的意思是服务器只是将帧推送到客户端,则可以使用前一个插件进行测试。只需使用 "Single read sampler"...
设置一个循环感谢 Peter 对此主题的回复。 我有一个很相似的use-case,只是想明白一件事:
如果我在“循环”中保留“单读采样器”,是否有可能在循环迭代之间丢失一些消息,或者是否有某种 buffering/streaming 确保在迭代之间消息不会丢失并在下一次“单读采样器”读取时返回?
在此先感谢您的帮助。
更新:
正如 Peter 对此答案的评论所预期的那样,我们确实看到从输入流中一个接一个地读取帧,没有任何丢失。
但是,我们观察到:
- 不同的 WS 读取超时值对读取的影响非常不同
- 对于给定的连接,如果我们预计会收到,比如说 500 条消息,在中间的某个时间,消息不会被 WS 读取(超时 = 7 秒),即使服务器确实推送它(在 18 毫秒内),因此,最终读取计数为 499。可以看出,此行为的极限取决于读取超时(即使消息在超时内被推送)。
以前是否观察到过这种行为?您能想出任何解释来解释为什么会发生这种情况吗?任何关于此的 solution/help 都会有很大帮助,谢谢。
PS:我无法将此添加为评论,因此很抱歉在这里发布查询。