前提:IP、端口號、入參、響應數據 開發都提供好。
一.步驟
1.新建線程組,並add -->Sampler-->TCP Sample
2.在TCP取樣器中,設置TCP請求的參數,主要設置的參數為:
(1)TCPClient classname:org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl
TCPClient classname 該參數一般有三個值設置:
- org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl(以文本編輯器中的純文本作為內容發送)
- org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl(以文本編輯器中所編輯的16進制字符(hex)內容為基礎轉換為二進制的字節內容進行發送)(常用)
- org.apache.jmeter.protocol.tcp.sampler.LengthPrefixedBinaryTCPClientImpl(在BinaryTCPClientImpl基礎上默認以發送內容的長度以字節前綴進行填充)
(2)服務器IP和端口號:輸入自定義的-開發提供,如下圖
(3)Text to send:待發送的數據報文 -開發提供,如下圖中要發送的文本(16進制)
3.下載第三方的TCP插件包ApacheJMeter_tcp.jar,並放置在jmeter\apache-jmeter-4.0\lib\ext目錄下
4.修改jmeter.properties 配置文件(路徑apache-jmeter-4.0\bin下)
搜索tcp 搜索到#tcp.handler=TCPClientImpl 是被注釋掉的 在下面新增一行,如下:
tcp.handler=BinaryTCPClientImpl 保存文件,並重啟Jmeter
5.最最重要的一點 End of line(EOL) byte value 值的設置
因為響應數據是以05結尾的(16進制), 需要將其轉換為10進制,所以此處的值應該設置為5
以下重要概念來源請看這里 https://www.cnblogs.com/bf-blackfish/p/10579867.html (寫的很詳細,解決了我的問題!!!)
6.單線程接口運行成功
二.遇到的坑:
1.text to send 輸入的16進制 不能換行 換行會報錯Response message: java.lang.IllegalArgumentException: Hex-encoded binary string contains an uneven no. of digits
解決辦法:刪除掉多余的空行
2.End of line(EOL) byte value 該值不設置或者設置的不對 報500 jmeter.protocol.tcp.sampler.TCPSampler: org.apache.jmeter.protocol.tcp.sampler.ReadException:而且服務器一直沒給返回,
解決辦法:文本結束符,非常重要 End of line(EOL) byte value:響應數據的最后2位,轉換為10進制的值。取值區間[-128,127]
3.要想每一個tcp請求結束后關閉掉鏈接,不然服務器上會顯示多個鏈接,一直沒釋放
解決辦法:勾選close connection:一個取樣器就只會用一個tcp連接,也就是發送完報文以后,就關閉tcp連接。
4.建議設置超時時間和長連接(沒用到 可以關注下)
Timeouts:設置請求和響應的超時時間,超時的話會報500錯誤。它決定了在你沒有輸入End of line 的時候,什么時候斷開tcp連接。如果沒有填寫的話就會一直在這里,
Re-use connection:在一個線程里,復用一個連接,在要求TCP長連接的時候需要用到這個。
5.Test Action(試了下 沒仔細研究)
在jmeter使用過程中,接口之間相關關聯,而有些接口響應時間較長,導致下個接口執行時,可能未能獲取到需要的信息。這個時候需要對上個接口做延時處理,就用到Test Action。
6.響應斷言
勾選Main sample only 、響應文本 要測試的模式中,輸入 響應數據