jmeter測試TCP服務器/模擬發送TCP請求 設置16進制發送(轉)


 

轉載留存:http://blog.sina.com.cn/s/blog_46d0362d0102v8ii.html
性能測試需要模擬多種場景,經常受制於資源限制,沒辦法建立貼近實際部署環境的場景。因而需要借助一些軟硬件提供的特性來模擬近似的環境。本文提到的JMeter是一種開源的模擬測試解決方案,可以通過多線程並發的方式來持續提供壓力測試源。
 
1.下載安裝
僅僅需要從apache的網站找到下載包,解壓到本地文件目錄即可。
 
2.啟動
解壓目錄中存在一個bin的目錄,里面有很多批處理文件和腳本文件,window系統運行jmeter.bat即可。需要關注的是bin目錄中的jmeter.properties文件,這是運行相關的配置文件. 特別是TCP Sampler configuration部分幾個配置會和后面內容相關
 
3.建立一種類型測試
這里只描述簡單的tcp測試建立步驟,因為目前支持的測試類型很多,無法一一陳述,功能細節部分可以參考JMeter文檔
1)創建測試線程組

2)根據需要設定線程組參數

3)建立TCP采樣

3)配置TCP采樣參數

基本上一個簡單的測試計划就完成了,點擊運行采樣,就會將文本發送出去。


4.高級功能配置
1)配置結果查看監聽器
有時候需要查看線程組執行結果情況,這個可以通過設定采樣結果查看
 
 
針對上面配置的線程組應該執行6次,也就是發送6條消息,通過監控器可以看到的確有6個采樣結果,說明執行成功

 

 

2)配置變量
有時候需要在報文中加上一些變化的內容,可以通過在文本中增加變量設定來實現


如增加一個變量名 bank, 其值為 1111,在前面發送的報文中加上${bank}即可引用,如




執行之后就可以在監控器中看到報文中有1111了

 
3)配置TCP 二進制報文
大多數情況下,報文可能非純文本形式,常常都是不可讀的二進制,所以這種情況下需要配置二進制報文。當前JMeter支持HEX形式,也就是16進制的報文輸入配置
當前支持三種格式 1.TCPClientImpl(默認) 2.BinaryTCPClientImpl 3.LengthPrefixedBinaryTCPClientImpl
 
使用二進制方式需要做如下幾件事:
a.把普通文本報文翻譯成HEX格式,可以找文本編輯器做這件事。比如notepad++,打開文本文件
Ctrl+A全選內容,paste到一個新文件,替換掉所有空格
3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e3c544c533e3c707273636f64653e6c6f67696e3c2f707273636f64653e3c69643e313233343536373c2f69643e3c746f6b656e3e75736a64666a6b736137356b733833326f6b7564736a643934383737616b6a6475613c2f746f6b656e3e3c2f544c533e
 
 

如果報文還需要加上頭的話,需要額外計算一下。比如增加一個command id和報文長度。比如上文中文本長度在編輯器狀態欄上顯示155長,假定command id是1.
System.out.println("155 hex " + Integer.toHexString(155));  --- 9b
System.out.println("1 hex " + Integer.toHexString(1));  ---1
如果command id是4個字節那么16進制字符串就是 00 00 00 01
如果length也是4個字節那么16進制字符串就是 00 00 00 9b
去掉空格加入到前面報文中就拼成如下新報文
000000010000009b3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e3c544c533e3c707273636f64653e6c6f67696e3c2f707273636f64653e3c69643e313233343536373c2f69643e3c746f6b656e3e75736a64666a6b736137356b733833326f6b7564736a643934383737616b6a6475613c2f746f6b656e3e3c2f544c533e
 
再把新報文放入發送字符串輸入框中。
 
b.修改JMeter啟動配置,就是前文提到的指定BinaryTCPClientImpl適配
在jmeter.properties文件中找到如下部分,修改一下
#---------------------------------------------------------------------------
# TCP Sampler configuration
#---------------------------------------------------------------------------
# The default handler class
#tcp.handler=TCPClientImpl
tcp.handler=BinaryTCPClientImpl
 
重新執行TCP測試,可以看到服務器端正常收到報文,如圖

 

jmeter測試TCP服務器,使用TCP采樣器模擬發送TCP請求。

TCP采樣器:打開一個到指定服務器的TCP / IP連接,然后發送指定文本並等待響應。

jmeter模擬發送TCP請求的方法:

1.新建線程組,然后在線程組中新建TCP采樣器

jmeter-tcp

TCP采樣器中填寫服務器地址、端口和“要發送的文本”,其它選項根據需要選填:

re_use connection表示重復發送連接請求

close connection 關閉連接

如果TCP請求需要用戶名/密碼,可以在登錄配置中填寫

2.新建“察看結果樹”監視器,查看發送的請求和響應的結果。如果需要發送16進制報文這個地方會失敗。

jmeter發送16進制TCP報文的方法:

很多TCP服務器報文為16進制,並且多數不能轉換成文本發送,而jmeter默認發送文本。

jmeter.properties中修改tcp.handler=BinaryTCPClientImpl ,啟動jmeter重新發送,抓包查看既是16進制的tcp報文。

另一個方法:可以在工作台新建–非測試元件–Property Display,Property Display中修改jmeter.properties只對當前進程有效。

轉載請注明出處:6san.com
原文地址: http://www.6san.com/716/

 

Jmeter TCP取樣器配置及發送圖解

 

最近在通過Jmeter測試TCP發送請求時,遇到相關問題,現記錄

查看管方文檔,TCP發送有三種啟用方式:

  • TCPClientImpl:文本數據,默認為這種
  • BinaryTCPClientImpl:傳輸16進制數據,指定包結束符。這種16進制文件會通過Jmeter GUI來轉換
  • LengthPrefixedBinaryTCPClientImpl:數據包中前2個字節為數據長度。可在bin/jmeter.properties配置文件中tcp.binarylength.prefix.length設置。

 

在實際抓包過程中,TCP的數據包很多時候都不是純文本的,經常是一些二進制文件之類的,所以這里就直接用傳16進制方式來傳數據

在啟動jmeter之前,需要在在啟動文件中設置,如下:

#---------------------------------------------------------------------------
# TCP Sampler configuration
#---------------------------------------------------------------------------

# The default handler class
#tcp.handler=TCPClientImpl
tcp.handler=BinaryTCPClientImpl
#
# eolByte = byte value for end of line
# set this to a value outside the range -128 to +127 to skip eol checking
#tcp.eolByte=1000

 

關鍵來了,我怎么獲取這個16進制數據呢?這里用wireshark可以很好解決這個問題,操作如下:

下圖是抓到的包,怎么抓包這里就不介紹了:

第二步:右鍵點擊Data--->Copy-->Bytes-->HEX Stream,如下圖:

完成后,直接在Ctrl+V貼入Jemeter的文本框中

發送就成功,查看結果樹中正好是我們想要的內容:

 

參考文檔:http://jmeter.apache.org/usermanual/component_reference.html#TCP_Sampler

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM