2014-07-04 25 views
0

我正在构建一个测试计划,用JMeter测试XMPP。但是,即使身份验证字符串正确,我仍然会向服务器发送身份验证字符串时遇到错误。有没有人有同样的问题,或知道如何解决这个问题?谢谢。JMeter - XMPP身份验证

2014/07/04 10:23:22 INFO - jmeter.engine.StandardJMeterEngine: Running the test! 
2014/07/04 10:23:22 INFO - jmeter.gui.util.JMeterMenuBar: setRunning(true,*local*) 
2014/07/04 10:23:22 INFO - jmeter.engine.StandardJMeterEngine: Starting ThreadGroup: 1 : Thread Group 
2014/07/04 10:23:22 INFO - jmeter.engine.StandardJMeterEngine: Starting 1 threads for group Thread Group. 
2014/07/04 10:23:22 INFO - jmeter.engine.StandardJMeterEngine: Thread will continue on error 
2014/07/04 10:23:22 INFO - jmeter.threads.ThreadGroup: Starting thread group number 1 threads 1 ramp-up 1 perThread 1000.0 delayedStart=false 
2014/07/04 10:23:22 INFO - jmeter.threads.ThreadGroup: Started thread group number 1 
2014/07/04 10:23:22 INFO - jmeter.engine.StandardJMeterEngine: All thread groups have been started 
2014/07/04 10:23:22 INFO - jmeter.threads.JMeterThread: Thread started: Thread Group 1-1 
2014/07/04 10:23:22 ERROR - ru.yandex.jmeter.XMPPClientImpl: Error reading data java.lang.RuntimeException: Retries more than 1000, aborting read 
at ru.yandex.jmeter.XMPPClientImpl.read(XMPPClientImpl.java:116) 
at org.apache.jmeter.protocol.tcp.sampler.TCPSampler.sample(TCPSampler.java:414) 
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:428) 
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) 
at java.lang.Thread.run(Unknown Source) 

2014/07/04 10:23:22 ERROR - jmeter.protocol.tcp.sampler.TCPSampler: java.lang.RuntimeException: Error reading data 
at ru.yandex.jmeter.XMPPClientImpl.read(XMPPClientImpl.java:152) 
at org.apache.jmeter.protocol.tcp.sampler.TCPSampler.sample(TCPSampler.java:414) 
at org.apache.jmeter.threads.JMeterThread.process_sampler(JMeterThread.java:428) 
at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) 
at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.RuntimeException: Retries more than 1000, aborting read 
at ru.yandex.jmeter.XMPPClientImpl.read(XMPPClientImpl.java:116) 
... 4 more 

2014/07/04 10:23:22 INFO - jmeter.threads.JMeterThread: Thread finished: Thread Group 1-1 
2014/07/04 10:23:22 INFO - jmeter.engine.StandardJMeterEngine: Notifying test listeners of end of test 
2014/07/04 10:23:22 INFO - jmeter.gui.util.JMeterMenuBar: setRunning(false,*local*) 
+0

你能显示在XMPPSampler你的测试计划,放大并显示你配置 –

+0

@ PMDUBIK-INGENIERIE https://www.dropbox.com/s/v8hlav0md nmmhrw/xmpp.png Youc可以参考链接来检查我的配置。 – Aaronsoso

+0

你能解决这个问题吗?我遇到了与XMPPClientImpl插件相同的问题。我已经添加了BeanShell Listener来查看我是否可以获得任何额外的调试信息,但没有用,我只是得到像上面发布的无用信息。我试图测试的服务器是Openfire聊天服务器,其日志甚至不显示来自Jmeter前端的任何连接尝试。我的下一步是使用Wireshark来查看在测试计划运行时是否可以获取任何有用的响应,但我并不抱希望。 – Wulf

回答

0

使用XMPPClientImpl插件我试过,但总是得到同样的错误(“重试次数超过1000,中止读”),所以我决定离开它,我自己写的代码。

我使用BeanShell取样器,在其中运行以下代码(使用smack库)连接到XMPP服务器。

String CLASS_PATH = "C:/JMeter/apache-jmeter-2.13/lib/ext/smack/"; 

addClassPath(CLASS_PATH + "smack-android-extensions-4.1.3.jar"); 
addClassPath(CLASS_PATH + "smack-tcp-4.1.3.jar"); 
addClassPath(CLASS_PATH + "smack-android-4.1.3.jar"); 

// explicitly import every class you need 
import org.jivesoftware.smack.XMPPConnection; 
import org.jivesoftware.smack.ConnectionConfiguration; 
import org.jivesoftware.smack.ConnectionListener; 

import org.jivesoftware.smack.tcp.XMPPTCPConnection; 
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration; 

import org.jivesoftware.smack.SmackException; 
import org.jivesoftware.smack.XMPPException; 
import org.jivesoftware.smack.XMPPException.XMPPErrorException; 

String jabberId = "..."; 
String jabberPass = "..."; 

String SERVER_ADDRESS = "..."; 
int PORT = 5222; // or any other port 

XMPPTCPConnection getConnection() { 

    XMPPTCPConnectionConfiguration config = 
     XMPPTCPConnectionConfiguration.builder() 
      .setUsernameAndPassword(jabberId, jabberPass) 
      .setHost(SERVER_ADDRESS) 
      .setServiceName(SERVER_ADDRESS) 
      .setPort(DEFAULT_PORT) 
     // .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) 
      .setSendPresence(true) 
     // .setDebuggerEnabled(YouMe.DEBUG) 
      .build(); 

    XMPPTCPConnection con = new XMPPTCPConnection(config); 

    int REPLY_TIMEOUT = 50000; // 50 seconds, but can be shorter 
    con.setPacketReplyTimeout(REPLY_TIMEOUT); 

    return con; 
} 

不要忘记添加咂嘴路径(例如C:\ JMeter的\ Apache的JMeter的2.13 \ LIB \分机\嫌)到库场(在 “添加目录或jar的classpath” )在测试计划的测试计划节点中。

要连接 -

con = getConnection(); 
con.connect(); 

登陆 -

con.login(jabberId, jabberPass); 

您还可以添加连接监听器 -

ConnectionListener listener = new ConnectionListener() { 

    public void connected(XMPPConnection xmppConnection) { 
      // run main code incl. the login code 
      runMain(); 
    } 
    public void authenticated(XMPPConnection xmppConnection, boolean resumed) { 
    } 
    public void connectionClosed() { 
    } 
    public void connectionClosedOnError(Exception e) { 
    } 
    public void reconnectingIn(int i) { 
    } 
    public void reconnectionSuccessful() { 
    } 
    public void reconnectionFailed(Exception e) { 
    } 
    }; 

con.addConnectionListener(listener); 

// connect 
con.connect(); 

runMain() { 
    con.login(jabberId, jabberPass); 

    // ... 
}