使用SoapUI Pro测试Camunda REST API性能 - java.net.SocketTimeoutException:读取超时

时间:2015-03-30 19:27:53

标签: rest soapui performance-testing load-testing camunda

我正在使用 SoapUI Pro 5.1.2 camunda BPM引擎的REST API 进行负载测试,并且我得到了大约10-30%的失败,并出现以下异常

Mon Mar 30 11:53:48 PDT 2015:ERROR:java.net.SocketTimeoutException: Read timed out
   java.net.SocketTimeoutException: Read timed out
   	at java.net.SocketInputStream.socketRead0(Native Method)
   	at java.net.SocketInputStream.read(Unknown Source)
   	at java.net.SocketInputStream.read(Unknown Source)
   	at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:149)
   	at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:110)
   	at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:264)
   	at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:98)
   	at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:252)
   	at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:281)
   	at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:247)
   	at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:219)
   	at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport$SoapUIHttpRequestExecutor.doReceiveResponse(HttpClientSupport.java:147)
   	at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
   	at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:633)
   	at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:454)
   	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
   	at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
   	at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport$Helper.execute(HttpClientSupport.java:233)
   	at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport.execute(HttpClientSupport.java:323)
   	at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.submitRequest(HttpClientRequestTransport.java:290)
   	at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.sendRequest(HttpClientRequestTransport.java:220)
   	at com.eviware.soapui.impl.wsdl.WsdlSubmit.run(WsdlSubmit.java:119)
   	at com.eviware.soapui.impl.wsdl.WsdlSubmit.submitRequest(WsdlSubmit.java:80)
   	at com.eviware.soapui.impl.rest.RestRequest.submit(RestRequest.java:192)
   	at com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep.run(RestTestRequestStep.java:793)
   	at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.runTestStep(AbstractTestCaseRunner.java:213)
   	at com.eviware.soapui.impl.wsdl.testcase.WsdlTestCaseRunner.runCurrentTestStep(WsdlTestCaseRunner.java:47)
   	at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.internalRun(AbstractTestCaseRunner.java:139)
   	at com.eviware.soapui.impl.wsdl.support.AbstractTestCaseRunner.internalRun(AbstractTestCaseRunner.java:47)
   	at com.eviware.soapui.impl.wsdl.support.AbstractTestRunner.run(AbstractTestRunner.java:129)
   	at com.eviware.soapui.impl.wsdl.loadtest.WsdlLoadTestRunner$InternalTestCaseRunner.run(WsdlLoadTestRunner.java:490)
   	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
   	at java.util.concurrent.FutureTask.run(Unknown Source)
   	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
   	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
   	at java.lang.Thread.run(Unknown Source)

这是负载测试场景:

  
      
  • 在我的测试用例中,我按顺序完成了一系列REST调用。
  •   
  • 加载测试属性 - 线程:100,Startegy:Burst,Burst Delay:10s,Burst Duration:5s,Limit 1000 Total Runs。
  •   

我已经尝试将SoapUI的“套接字超时”选项设置为300000,即300秒,我看到这是我在论坛上找到的唯一选项,但我仍然遇到这些错误。另外,正如我所提到的,并非所有1000次运行都是失败的,只有10-30%的运行失败,并且出现此异常。

有时,负载测试会成功将总运行时间限制在500以下,即使这样,我也会遇到一些错误并偶尔发生。

从上面的描述,我理解问题是在客户端(SoupUI)方面(或者我的理解不对吗?)并且想知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果您的进程是同步的,则启动该进程的REST调用将阻塞,直到该进程完成。这意味着如果进程花费的时间超过配置的套接字超时,则连接将被关闭,因为套接字上不再需要其他数据。解决方案是将进程的启动事件设置为async,以便REST调用立即返回。但我不知道这是否符合您的基准。

答案 1 :(得分:0)

我之前在SoapUI的全局设置中设置了套接字超时,但我在SmartBear forum中发现我们为测试用例提供了单独的套接字超时选项。当我为测试用例设置超时时,它就可以工作。