1. 程式人生 > >Jmeter 壓測TCP請求步驟

Jmeter 壓測TCP請求步驟

公司需要,這兩天苦學了一番jmeter的tcp壓測,現在回頭想想挺簡單的,以此記錄一下,方便以後檢視

1.什麼是TCP請求?

該協議主要用於在主機間建立一個虛擬連線,以實現高可靠性的資料包交換。IP協議可以進行IP資料包的分割和組裝,但是通過IP協議並不能清楚地瞭解到資料包是否順利地傳送給目標計算機。而使用TCP協議就不同了,在該協議傳輸模式中在將資料包成功傳送給目標計算機後,TCP會要求傳送一個確認;如果在某個時限內沒有收到確認,那麼TCP將重新發送資料包。另外,在傳輸的過程中,如果接收到無序、丟失以及被破壞的資料包,TCP還可以負責恢復。

2.如何進行在jmeter上進行tcp請求進行壓力測試?

第一步新建一個執行緒組,根據需要設定執行緒數,時間和迴圈次數,建議沒調通之前都設定為1;我設定的是一有錯誤立即停止測試。

第二步:新建一個tcp取樣器,這裡是能否調通的關鍵

填入ip和埠後,文字填寫是關鍵,網上好多說的不明瞭,文字是你要傳輸的報文體,一般tcp的報文體是有帶報文頭的,也就是規定的報文長度,如果不知道的情況下可以找開發確認。我試過用文字格式填寫報文體,但每次都會報Response message: org.apache.jmeter.protocol.tcp.sampler.ReadException: Error reading from server, bytes read: 0,請求是會請求到伺服器,但是文字讀不出來,會返回剛剛說的那個錯。這個問題主要用字串轉換成十六進位制能解決這個問題。

jmeter有提供三大類給我們

  • TCPClientImpl 預設文字傳輸,這個很容易出現剛剛說的問題
  • BinaryTCPClientImpl 這個是十六進位制傳輸,但是我用這個的時候,會出現字首報文長度讀不出來的情況,伺服器有資料返回,解析不出報文體長度,導致取樣結果輸出失敗
  • LengthPrefixedBinaryTCPClientImpl 它在BinaryTCPClientImpl前面增加資料長度,它預設有兩個位元組,下面重點介紹怎麼設定這東西的開啟jmeter的屬性設定文字,把tcp.handler=TCPClientImpl 改成 tcp.handler=LengthPrefixedBinaryTCPClientImpl,報文體長度如果是兩位數他會自動識別,不需要把報文長度放到文字中去傳送;如果是大於兩位數的,直接在jmeter的屬性文字中改下預設值就好了
  • 以下是成功返回的樣式
  • 響應返回的也是16進位制的串(如果知道前兩位報文頭,開發給的報文頭後面是正常的文字格式的請求的話,可以用網上十進位制轉16進位制的轉換器,轉換完成再把十六進位制的報文放到TCP Sample的請求報文裡面)
  • 單執行緒跑通後就可進行高併發測試了,建議再新增一個用表格檢視結果的監聽器,可以看到每次執行緒的耗時和響應時間,如果速度慢慢變慢,所設定的併發數已經慢慢靠近系統的瓶頸值了,可以看看伺服器的負載均衡,此時負載應該曲線會上升。