JMeter & socket.io - 我可以看到我想要的消息,但套接字插件没有显示我所期望的
JMeter & socket.io - I can see the message I want, but the socket plugin is not showing what I expect
这是我在浏览器调试器控制台中看到的套接字消息:
也许更能说明问题:
我调用一个 API 操作来通过套接字触发此消息。
我试过的
为了避免不准确,我启动了 2 个 JMeter 实例。
- REST API 调用。
- GitHub JMeter example of sockets.io 的修订版,其中我只是在 wss://events.dev.myserver.com:443/socket.io/?EIO=4&transport=websocket 上重复调用 WebSocket 采样器。
我开始了(2).
虽然那是 运行宁,但我开始了 (1)。
预期
最终,(1) 应该会在“查看结果树”中显示一个采样器,并在屏幕截图中显示消息 ("42" - GAME_STARTED)
实际
我看到的唯一消息如下所示:
这就是我真正想要做的:运行 适当的采样器,在进行 API 调用后有足够的时间来获取消息。
更新
我们使用 python-socketio 成功找到消息:
sio.connect("https://events.dev.server.com", transports='websocket',
headers={'Sec-WebSocket-Extensions: permessage-deflate', 'Sec-Fetch-Dest: websocket',
'Sec-Fetch-Mode: websocket',
'Cookie: ABCSESSIONDEV=NTI3MzkwNWUtMTJmNS00Y2U0LTk1NGUtMjQ2Mzk5OTYxZWE0'})
这是输出:
Received packet MESSAGE data 2["message","{\"locationId\":110,\"name\":\"GAME_STARTED\",\"payload\":{\"id\":146724,\"boxId\":2002,\"userId\":419,\"createdAt\":\"2022-03-02T14:35:31\",\"lastModifiedAt\":\"2022-03-02T14:35:36.752\",\"completedAt\":\"2022-03-02T14:35:36.621\",\"activationMethod\":\"TAG\",\"nfcTagId\":\"xxxxxx\",\"gameCount\":1,\"app\":false}}"]
我现在想在 JMeter 中使用 websocket 插件来执行此操作。
- 尝试将 Cookie 添加到 WebSocket 调用 - 只有 SIDS,没有消息。
- 尝试将 Cookie 添加到 HTTPS 请求(如上面的代码)- 400,请求错误。
查看 HTTP 请求的其他字段,特别是 HTTP Headers,很可能您的 JMeter 请求缺少一些基本信息。
我的期望是,为了“开始游戏”(无论它是什么意思),您需要在浏览器中打开页面,以某种方式授权,按照 protocol upgrade mechanism 等步骤操作完全模仿真正的浏览器所做的,所有在开始游戏之前的请求序列。
您可能需要correlate dynamic parameters, add HTTP Header Manager, add HTTP Cookie Manager,等等
这是我在浏览器调试器控制台中看到的套接字消息:
也许更能说明问题:
我调用一个 API 操作来通过套接字触发此消息。
我试过的
为了避免不准确,我启动了 2 个 JMeter 实例。
- REST API 调用。
- GitHub JMeter example of sockets.io 的修订版,其中我只是在 wss://events.dev.myserver.com:443/socket.io/?EIO=4&transport=websocket 上重复调用 WebSocket 采样器。
我开始了(2).
虽然那是 运行宁,但我开始了 (1)。
预期
最终,(1) 应该会在“查看结果树”中显示一个采样器,并在屏幕截图中显示消息 ("42" - GAME_STARTED)
实际
我看到的唯一消息如下所示:
这就是我真正想要做的:运行 适当的采样器,在进行 API 调用后有足够的时间来获取消息。
更新
我们使用 python-socketio 成功找到消息:
sio.connect("https://events.dev.server.com", transports='websocket',
headers={'Sec-WebSocket-Extensions: permessage-deflate', 'Sec-Fetch-Dest: websocket',
'Sec-Fetch-Mode: websocket',
'Cookie: ABCSESSIONDEV=NTI3MzkwNWUtMTJmNS00Y2U0LTk1NGUtMjQ2Mzk5OTYxZWE0'})
这是输出:
Received packet MESSAGE data 2["message","{\"locationId\":110,\"name\":\"GAME_STARTED\",\"payload\":{\"id\":146724,\"boxId\":2002,\"userId\":419,\"createdAt\":\"2022-03-02T14:35:31\",\"lastModifiedAt\":\"2022-03-02T14:35:36.752\",\"completedAt\":\"2022-03-02T14:35:36.621\",\"activationMethod\":\"TAG\",\"nfcTagId\":\"xxxxxx\",\"gameCount\":1,\"app\":false}}"]
我现在想在 JMeter 中使用 websocket 插件来执行此操作。
- 尝试将 Cookie 添加到 WebSocket 调用 - 只有 SIDS,没有消息。
- 尝试将 Cookie 添加到 HTTPS 请求(如上面的代码)- 400,请求错误。
查看 HTTP 请求的其他字段,特别是 HTTP Headers,很可能您的 JMeter 请求缺少一些基本信息。
我的期望是,为了“开始游戏”(无论它是什么意思),您需要在浏览器中打开页面,以某种方式授权,按照 protocol upgrade mechanism 等步骤操作完全模仿真正的浏览器所做的,所有在开始游戏之前的请求序列。
您可能需要correlate dynamic parameters, add HTTP Header Manager, add HTTP Cookie Manager,等等