如何为 sockets.io 场景正确构建 JMeter 测试计划 - 事件 "subscription"

How to structure a JMeter test plan properly for a sockets.io scenario - event "subscription"

场景大纲

测试发送 REST API 请求以激活游戏。 网站收到 socket.io 事件并在浏览器上显示警报。

问题

因为我不知道什么时候发送事件,我是否需要 运行 一个 WebSocket 采样器,或者一个 WebSocket 单读采样器,在一个循环中,直到我得到匹配的消息? 到目前为止,在我的尝试中,我可以连接到事件服务器并获取消息,但它们是空帧或消息与下面的完全不同。

我期待这样的消息,我可以使用浏览器调试器手动验证它。

{
    "locationId": 110,
    "name": "GAME_STARTED",           <---------------------
    "payload": {
        "id": 146418,
        "boxId": 2002,
        "userId": 419,
        "createdAt": "2022-02-17T09:10:16",
        "lastModifiedAt": "2022-02-17T09:10:22.189",
        "completedAt": "2022-02-17T09:10:22.07",
        "activationMethod": "TAG",
        "nfcTagId": "123423423412342134",
        "gameCount": 1,
        "app": false
    }
}

或者,这行得通吗?

thread A:
open socket
while (true):
   read socket
   if message ~ 'GAME_STARTED':
       break

thread B:
send HTTP REST API request   # triggers event to be sent

这里是用于连接的参数以及我指定响应模式的位置,这需要通配符或 JSON 表达式。

您可以考虑使用WebSocket Text Frame Filter

如果你添加像上面配置的过滤器,它会删除所有不包含 GAME_STARTED 文本的帧,这样 WebSocket 单读采样器就不会“看到”它们,这样你就可以只有一个没有任何循环或其他逻辑的采样器。

更多信息: