如何将JMeter采样器注册为SignalR服务器客户端以监听消息
使用JMeter测试SignalR服务器监听功能(基于WebSocket插件)
核心目标
模拟JS客户端行为,完成:
- 连接SignalR的
ActivityHub - 注册监听
ReceiveMessage事件 - (可选)调用
NewMessage方法触发服务器推送 - 接收并验证服务器推送的消息
步骤1:配置WebSocket连接
- 添加WebSocket Open Connection采样器:
- 填写SignalR Hub的WebSocket地址(示例:
ws://your-server-domain/activityhub) - 设置固定连接ID(如
signalr-connection),后续所有采样器复用该ID - 按需添加请求头:如
Origin(匹配服务器CORS配置)、Sec-WebSocket-Version: 13等(插件通常自动生成基础头)
- 填写SignalR Hub的WebSocket地址(示例:
步骤2:发送SignalR握手消息
- 添加WebSocket Single Write采样器,复用上述连接ID,发送握手JSON:
这是SignalR识别WebSocket客户端的必要初始化步骤{"protocol":"json","version":1}
步骤3:注册监听ReceiveMessage事件
- 添加WebSocket Single Write采样器,复用连接ID,发送注册事件的消息:
{"type":1,"target":"ReceiveMessage","arguments":[]}type:1:表示注册事件的指令target:指定要监听的服务器推送事件名ReceiveMessagearguments:监听事件无需传参,留空数组
步骤4:(可选)触发服务器推送
若需主动调用NewMessage方法触发推送,添加WebSocket Single Write采样器:
{"type":1,"target":"NewMessage","arguments":["test-username","hello from JMeter"]}
target:指定要调用的Hub方法名NewMessagearguments:按顺序传入方法参数(用户名、消息内容)
步骤5:接收并验证推送消息
- 添加WebSocket Single Read采样器,复用连接ID,设置合理超时时间(如5000ms)
- 服务器推送的
ReceiveMessage消息格式示例:{"type":2,"target":"ReceiveMessage","arguments":["test-username","hello from JMeter"]} - 添加响应断言,验证
arguments中的用户名、消息内容是否符合预期
步骤6:(可选)关闭连接
测试结束前,添加WebSocket Close Connection采样器,复用连接ID关闭WebSocket连接
关键注意事项
- 所有相关采样器必须使用同一个连接ID,否则会创建多个独立连接,无法正常接收推送
- 若服务器是ASP.NET Core SignalR,部分场景需先发送HTTP协商请求(GET到
/activityhub/negotiate),获取connectionToken后,在WebSocket地址后拼接?id=xxx参数 - 可通过查看结果树采样器,逐步骤验证握手、注册、调用、接收的消息是否正确
内容的提问来源于stack exchange,提问作者The Trainer
相关产品推荐
相关产品推荐

