2011-10-20 146 views
1

我正在使用testNG和java http客戶端爲我們的API編寫快速加載測試。我的線程似乎阻止超過預期,所以我想確保http客戶端正在做我的想法。我的基本僞代碼是Java 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) 

回答

0

這可能是因爲它是在那段時間等待在網絡上。

如果您發佈與TestNG相關的代碼,它可能會有所幫助。

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個連接[原文]。

+0

它主要運行在mac上。有沒有辦法監控連接使用?我很好,如果我打到機器限制,只要它不是我的代碼的錯誤/問題 – ducati1212

+0

@ ducati1212它看起來像OS X是更加寬容這樣的事情。看起來內置防火牆可能會限制連接數量,但我不知道如何檢查該問題,或者可以配置該設置或由誰來設置。我想你可能會問Google教授這個特殊的因素 –