最近公司做了個直播的項目,需要用到Websocket進行通信,因而需要對socket最大連接數及穩定性進行測試。當初得到這一需求的時候,唯一想到的就是jmeter,從百度下載相應的socket依賴jar包,開始研究(畢竟第一次做這方面的測試),擔心單台壓力源不夠用,又整了個分布式,不過最終發現Jmeter並不適合測試Socket的最大連接數,於是調整了思路,尋找其他方法,功夫不費有心人,最后發下了一款不錯的socket測試小工具(點擊下載)是一個.exe文件,使用該工具可以很容易的實現socket穩定性測試,連接數測試就有點麻煩了,因為我們的Websocket需要傳遞一些參數,這就涉及到對參數進行參數化,此時想到之前做自動化用到的一個工具叫autoit3,通過autoit3調用該.exe程序來實現對不同參數的輸入,需要提前准備好數據文件:具體代碼如下:
Run("E:\webSocket\WebSocket_test\TradePhoneClient.exe") Sleep(5000) WinWait("Form1") $sheet = Gettestsheet("E:\webSocket\WebSocket_test\student_uuid20000_data.csv",1) For $i= 1 TO 801 Step 1 Dim $stu_uid = $sheet.Cells($i,1).value CreateWebSocketConnect($stu_uid) ;MsgBox(4096, "讀取的行:", $stu_uid) Next CloseExcel() Func CreateWebSocketConnect($stu_uid) ControlSetText("Form1","","[CLASS:WindowsForms10.EDIT.app.0.141b42a_r14_ad1;INSTANCE:2]","ws://XXXXXXX.cn/broadcast-rest/echo?uuid="&$stu_uid&"&type=student&encryptId=testrenshu2000") ControlClick("Form1","","[CLASS:WindowsForms10.BUTTON.app.0.141b42a_r14_ad1;INSTANCE:6]") WinWait("[CLASS:#32770]","",3) ControlClick("[CLASS:#32770]","","Button1") EndFunc Func Gettestsheet($path,$sheetindex) ProcessClose("EXCEL.EXE") $oExcel = ObjCreate("Excel.Application") $oExcel.visible=0 $workbook=$oExcel.WorkBooks.Open($path) $sheet=$workbook.Worksheets.Item($sheetindex) Return $sheet EndFunc Func CloseExcel() $workbook.Save(); $oExcel.Quit(); ProcessClose("EXCEL.EXE");退出不了則強制殺死進程 EndFunc
總結:webSocket最大連接數取決Tomcat最大線程數,系統進程數/etc/security/limits.d/90-nproc.conf文件,一般設置51200