1

我正在使用 testNG 和 java http 客户端为我们的 API 编写一个快速负载测试。我的线程似乎比预期阻塞更多,所以我想确保 http 客户端正在做我认为的事情。我的基本伪代码是

class 1
    @test method{
     some junk
     myHttpWrapper my = new myHttpWrapper()
    }

class 2   
    public myHttpWrapper{
      HttpClient client = new DefaultHttpClient();
      bunch of packaging up a post params
      HttpResponse response = client.execute(post);
    }

所以我告诉 testNG 在 120 个线程中运行我的 @test 5000 次。我在 java 控制台中看到很多阻塞线程。这不是我的代码,但本质上是我正在做的事情的流程。我希望为我的测试生成的每个线程 testNG 也会生成一个单独的 http 客户端。如果是这样,为什么所有线程都阻塞了。

这是 jconsole 中看到的块中的典型线程堆栈:

java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.read(SocketInputStream.java:129)
org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:149)
org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:110)
org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:264)
org.apache.http.impl.conn.LoggingSessionInputBuffer.readLine(LoggingSessionInputBuffer.java:115)
org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:98)
org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:252)
org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:281)
org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:247)
org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:219)
org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:298)
org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:645)
org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:464)
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
ss.qa.test_files.HTTP_Methods.sendPost(HTTP_Methods.java:91)
ss.qa.test_files.apiHelper.ActivateCoupon(apiHelper.java:376)
ss.qa.test_scripts.myPerfTest.ActivateCoupon(BACPerfTest.java:85)
4

2 回答 2

0

你在什么操作系统上运行这个?Java 在将您与主机操作系统的特定细节和限制隔离开来方面做得很好,但它不能做的一件事是超过操作系统内核、网络驱动程序和网络硬件允许的网络连接数,结合时。

来自http://www.techiecorner.com/34/how-to-adjust-your-window-xp-tcp-connection-to-boost-your-bt-download-speed/

随着 Microsoft Windows XP Service Pack 2 (SP2) 的发布,它已将并发 TCP 连接限制为每秒 10 个连接 [原文如此]。

于 2011-10-20T18:03:54.863 回答
0

可能是它在那段时间在网络上等待。

如果您发布与 TestNG 相关的代码可能会有所帮助。

于 2011-10-20T17:59:32.117 回答