【问题标题】:Testing Camunda REST API performance with SoapUI Pro - java.net.SocketTimeoutException: Read timed out使用 SoapUI Pro 测试 Camunda REST API 性能 - java.net.SocketTimeoutException:读取超时
【发布时间】:2015-03-30 19:27:53
【问题描述】:

我正在使用 SoapUI Pro 5.1.2camunda 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,限制 1000 总运行。

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

有时,负载测试会成功,将总运行次数限制在 500 以下,即便如此,我也会遇到其中一些错误,而且是偶尔出现的。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 这是一个有趣的选项@sebastian-menski,谢谢你,稍后将尝试将启动事件和其他任务设置为异步。我的过程很简单,没有任何实现或任何变量,因此我的负载测试在不到一分钟的时间内完成。考虑到我在 SoapUI 上设置的 300 秒的套接字超时,我真的很想在不更改模型的情况下修复我的测试,因为我相信应该在 SoapUI 或 tomcat/camunda 上调整一些配置。我尝试过投票,但由于我的观点不允许。
    • 如果你的进程很简单,另一个问题可能是tomcat的线程池和/或数据库的连接池太小。也许你可以先增加它们。
    • 我尝试过使用异步选项,但我可能没有按预期完成,因为我对 BPM 世界和 Camunda 还比较陌生。它没有用。但是,正如我在回答中提到的那样,为测试用例设置套接字超时虽然需要更长的时间来增加线程数,但为此,我猜你提到的关于线程池/连接池设置的原因可能是正确的。我试试看,谢谢!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-01-29
      • 2011-07-13
      • 2015-06-30
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多