我想将JMeter与插件maciejzaleski / JMeter-WebSocketSampler一起使用来进行一些websocket测试。
在服务器端,我运行了一个带有java websocket端点的tomcat。所以我正在使用tomcat 8.0中的websocket库。
在我的测试中,我向jmeter采样器发送一个带有编号的请求消息给服务器。如果触发了OnMessage事件,我使用该数字从mongodb中读取许多数据集。在读完数据集之后,我想将它们发送回jmeter。它就像一个echo服务器。
@OnMessage
public void echo(int message, Session session) throws IOException{
System.out.println("Client message: " + message);
int limit=0;
limit = message;
//connect to mongoDB
//MongoClient client = new MongoClient("localhost",27017);
mongo = new MongoAccess(client);
//start time reading data
long timeOne = System.currentTimeMillis();
System.out.println("Time One:" + timeOne + "ms");
//read data from mongoDB
String data= mongo.readNumberOfDocuments(limit).toString();
//end time reading data
long timeTwo = System.currentTimeMillis();
System.out.println("Time Two:" + timeTwo + "ms");
System.out.println("Read Time Mongo: " + (timeTwo-timeOne) + "ms");
//send data to client
session.getBasicRemote().sendText("DB Time:" + (timeTwo-timeOne)+"ms "+data);
//close connection to mongoDB
client.close();
//Logging read times from mongo db
logReadTime(timeOne,timeTwo,"OnMessage");
}
如果我为100个数据集发送数字100并使用循环一次它可以正常工作。但是如果我想要更多像1000这样的数据集或者在循环100中使用它就不起作用。我的tomcat会抛出这样的异常。
服务器只能发送113个数据集而不是1000个,因为连接已关闭,而数据集可以到达。
我的目标是通过websocket连接发送不同数量的数据集并更改循环次数。例如,我想发送100次请求并接收1000个数据集到jmeter。另外,我想模拟不同数量的用户。所以我想分析不同的响应时间。
我认为问题出在jmeter方面,因为我的浏览器中有一个简单的websocket客户端,我没有问题....
任何想法我做错了什么?如何用Jmeter测试类似的东西?
答案 0 :(得分:3)
截至2017年9月,最新,维护和功能强大的websocket插件就是这个:
可以通过jmeter-plugins插件管理器轻松安装:
根据您打开的issue,插件中没有类型0的帧支持,但开发人员正在处理它。 另见:
答案 1 :(得分:0)
websocket插件有一些问题,虽然建议的修补程序有时会被维护者合并,但是这个插件有一些改进的分支(我自己创建了一个)。所以我会检查那些,看看是否有一个解决了你的特殊问题。我想我还记得一些“高音量”的音量。一些分叉解决了问题。见这里:https://github.com/maciejzaleski/JMeter-WebSocketSampler/network
希望它有所帮助。