JMeter websocket插件maciejzaleski / JMeter-WebSocketSampler的问题 - java.io.IOException

时间:2017-09-12 13:47:57

标签: tomcat websocket jmeter

我想将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");




}

JMeter Testplan

如果我为100个数据集发送数字100并使用循环一次它可以正常工作。但是如果我想要更多像1000这样的数据集或者在循环100中使用它就不起作用。我的tomcat会抛出这样的异常。

Tomcat Exception

服务器只能发送113个数据集而不是1000个,因为连接已关闭,而数据集可以到达。

我的目标是通过websocket连接发送不同数量的数据集并更改循环次数。例如,我想发送100次请求并接收1000个数据集到jmeter。另外,我想模拟不同数量的用户。所以我想分析不同的响应时间。

我认为问题出在jmeter方面,因为我的浏览器中有一个简单的websocket客户端,我没有问题....

任何想法我做错了什么?如何用Jmeter测试类似的东西?

2 个答案:

答案 0 :(得分:3)

截至2017年9月,最新,维护和功能强大的websocket插件就是这个:

可以通过jmeter-plugins插件管理器轻松安装:

根据您打开的issue,插件中没有类型0的帧支持,但开发人员正在处理它。 另见:

答案 1 :(得分:0)

websocket插件有一些问题,虽然建议的修补程序有时会被维护者合并,但是这个插件有一些改进的分支(我自己创建了一个)。所以我会检查那些,看看是否有一个解决了你的特殊问题。我想我还记得一些“高音量”的音量。一些分叉解决了问题。见这里:https://github.com/maciejzaleski/JMeter-WebSocketSampler/network

希望它有所帮助。