我在我的SignalR集线器中有一个非常简单的方法:
public class ActivityHub : Hub
{
public async Task NewMessage(string username, string message) =>
await Clients.All.SendAsync("ReceiveMessage", username, message);
}
当我使用我的客户端(也是用JavaScript编写的非常简单的应用程序)时,它工作得很完美
我的问题的线索是找到如何通过Jmeter测试我的集线器。我已经找到了一些关于stackoverflow的主题,以及教程:https://medium.com/@goldberg_rui/test-signalr-performance-with-jmeter-59083554f917我写了一个简单的测试,但它不工作。我在教程中使用了“ WebSocket Samplers by Peter Doornbosch”
。
首先我协商(simple HTTP Request
):http://localhost:56325/activity/negotiate
返回一些我从中提取connectionId的数据。
然后我打开新的连接(WebSocket Open Connection
)与/activity?id=$(ConnectionId)
。
最后,我尝试在现有连接的集线器中调用方法(WebSocket Single Write Sampler
),并将数据:{"arguments": ["abc","abc"], "invocationId":123,"target":"NewMessage","type":4}
.不幸的是,我收到错误消息:
Response code:Sampler error
Response message:Sampler configured for using existing connection, but there is no connection
测试中的bug在哪里?我知道我需要在消息的末尾添加终止字符0x1E
。可能消息类型(4)不正确或参数传递错误?我还放了我的JMeter测试的截图。重要提示:仅启用第二个写入器,禁用第一个写入器。
2条答案
按热度按时间6kkfgxo01#
你的设置看起来不错,但是错误消息意味着连接没有打开,所以我的期望是你的
WebSocket Open Connection
采样器在某个地方失败了。1.使用View Results Tree侦听器检查请求和响应,并将它们与JavaScript发送的请求和响应进行比较
1.检查jmeter.log文件中是否有任何可疑条目,如在JMeter GUI右上角看到黄色感叹号,看起来至少有2个需要修复的错误。您也可以考虑使用increasing JMeter debug logging verbosity to DEBUG level来使用WebSocket采样器,方法是将下一行添加到 log4j2.xml 文件中:
将需要重新启动JMeter以获取更改
euoag5mw2#
将RegEx Extractor更改为JSON Extractor,并将
Json Path Expression
设置为$.connectionId
。其余的测试都很好。