Jmeter socket接口測試
一、Socket簡介
什麼是socket呢?我們經常把socket翻譯為套接字,socket是在應用層和傳輸層之間的一個抽象層,它把
TCP/IP層複雜的操作抽象為幾個簡單的接口供應用層調用已實現進程在網絡中通信。socket通信模塊示意圖
如下:
二、TCP Sampler相關知識
我們先來看一下取樣器的界面,然後再做詳細介紹。
Name:組件的名稱,可以自定義;
TCPClient classname:指定TCP發送報文的格式,後面會給出詳細介紹;
Server Name or IP:服務器的地址;
Port Number:服務器的端口號;
Connect Timeout:與服務器套接字應用連接超時時間(ms),如果設置了,讀取超時會終止請求;
Response Timeout:響應的超時時間(ms),設置後,響應時間達到該值,無論是否響應成功都會關閉連接;
Re-use connection:如果選中,連接會一直處於打開狀態,否則讀取到數據之後就關閉;
Close connection: 如果選中,在TCP Sampler運行完畢之後就會被關閉;
Set NoDelay:是否使用Nagle算法;
SO_LINGER:該配置項用於控制在關閉連接之前是否要等待緩衝區中的數據發送完成。如果SO_LINGER選項指
定了值,則在得到關閉連接的請求之後還會等待指定的秒數以完成緩衝區中數據的發送,在指定的SO_LINGER秒
數完成後,關閉連接。因此,如果你把該選項設置成0,那麼所有連接在收到關閉連接的時候都會立即關閉,避免
產生很多處於TIME_WAIT狀態的套接字。
End of line(EOL) byte value:判斷行結束的byte值,如果你指定的值大於127或者小於-128,則會跳過EOL檢測。
Text to Send:發送的報文
Login Configuration:根據官網文檔解釋,TCP相關請求默認不使用此項。
三、接口測試實戰
在進行TCP接口測試之前,首先要搞清楚兩個問題:
1.發送的報文格式是什麼樣的?
2.發送的報文結束符是什麼?
TCPClient classname支持三種類別:
TCPClientImpl:文本傳輸,TCP請求中默認的類;
BinaryTCPClientImpl:用來發送十六進制報文,可以將十六進制報文轉換成二進制;
LengthPrefixedBinaryTCPClientImpl:繼承了BinaryTCPClientImpl類所有功能,默認在BinaryTCPClientImpl類前面增加兩個位元組數據長度。
本次項目中,發送的是定長的XML格式報文。所謂定長,就是在報文的頭部定義一段數字來獲取整個報文的
數據長度。這個長度是在開發過程中約定好的,如果不傳,TCP請求是無論如何也不會成功。報文是XML格式,
所以結束符為 > 。
發送的報文為XML格式,我們需要去jmeter安裝目錄找到jmeter.properties,修改tcp.handler的值為
TCPClientImpl並去掉前面的#號。這裡需要注意,TCP請求默認的文本傳輸編碼是GBK,如果報文不是
這種編碼,需要更改tcp.charset的值,我這裡更改為UTF-8。
此外,根據報文格式,參照ASCII對照表確定End of line(EOL) byte value的值為62。整體測試參數配置如下:
單條數據跑通後,調整Thread Group中的線程數和循環次數即可進行TCP接口壓力測試了。
參考文檔://jmeter.apache.org/usermanual/component_reference.html#TCP_Sampler