Java http客户端和线程

时间:2011-10-20 17:47:22

标签: java testng apache-httpclient-4.x

我正在使用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)

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分: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个连接[ sic ]。