1. 程式人生 > >jmeter應用---測試元件介紹(四)

jmeter應用---測試元件介紹(四)

JSR223 Sampler

jsr223的取樣器允許使用jsr223指令碼程式碼來執行一個取樣器。
jsr 223測試元素有一個可以顯著提高效能的特性(編譯)。從這個特性中獲益:

  • 使用指令碼檔案而不是內聯它們。這將使JMeter編譯它們,如果這個特性在ScriptEngine中可用,並快取它們。
  • 若編譯屬性設定為true,可以使用指令碼文字和檢查快取編譯的指令碼。

在使用這個特性時,確保指令碼程式碼沒有直接在指令碼程式碼中使用JMeter變數,因為快取只會快取第一個替換。

快取大小由以下JMeter屬性(JMeter.properties)設定:

jsr223.compiled_scripts_cache_size 
= 100

JSR223支援的變數有,可以直接在指令碼中使用

  • log:log 寫入資訊到jmeber.log檔案
  • vars - JMeterVariables操作jmeter變數,這個變數實際引用了JMeter執行緒中的區域性變數容器(本質上是Map),它是測試用例與BeanShell互動的橋樑
    • vars.get(String key):從jmeter中獲得變數值
    • vars.put(String key,String value):資料存到jmeter變數中
    • vars.putObject(“OBJ1”,new Object());
  • props - JMeterProperties - class java.util.Properties操作jmeter屬性,該變數引用了JMeter的配置資訊,可以獲取Jmeter的屬性,它的使用方法與vars類似,但是隻能put進去String型別的值,而不能是一個物件。
    • props.get(“START.HMS”) START.HMS為屬性名,在檔案jmeter.properties中定義
    • props.put(“PROP1”,”1234”);
  • SampleResult - SamplerResult:提供對前一個取樣器結果的訪問
  • sampler - sample當前取樣器
  • Label - 取樣器標籤
  • FileName - 檔名稱
  • Parameters - 入參列表
  • args - 入參變數陣列類似java main中的args
  • SampleResult - SampleResult
    • ResponseCode:預設是200
    • ResponseMessage:預設是ok
    • IsSuccess:預設是true

支援的語言:
language

TCP Sampler

TCP 取樣器通過TCP/IP來連線特定伺服器,連上伺服器之後傳送訊息,然後等待伺服器響應。JMeter提供純TCP協議級別Sampler,可以通過它來完成所有基於TCP協議的效能測試

tcpui

TCPClient classname:TCP Sampler提供了3個Sampler的實現,分別是

  • org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl
  • org.apache.jmeter.protocol.tcp.sampler.BinaryTCPClientImpl
  • org.apache.jmeter.protocol.tcp.sampler.LengthPrefixedBinaryTCPClientImpl

Re-use connection:如果“Re-use connection”(重複使用連線) 複選框被選中了,在同一個執行緒中Samplers(取樣器)共享連線,包含相同主機名和埠,不同主機/埠合併將會使用不同執行緒。如果“Re-use connection” 和 “Close connection”(關閉連線)同時被選中,這個套接字在執行完當前Samplers將會關閉。再下一個Sampler將會另外建立一個新套接字。你可能想要在每次執行緒迴圈結束之後關閉套接字。
如果請求發生錯誤或者“Re-use connection” 沒有被選中,這個套接字將會關閉,新的套接字將會在接下個Sampler呼叫的時候開啟。

Close connection:關閉連線

以下的屬性可以控制設定TCP

  • tcp.status.prefix
    用文字來表示字首的狀態數字
  • tcp.status.suffix
    用文字來表示字尾的狀態數字
  • tcp.status.properties
    用屬性檔名稱去將狀態碼轉成訊息
  • tcp.handler
    表示處理請求的實現類(預設是TCPClientImpl)-對應介面TCPClient classname
    這個處理器請求的類已經在GUI配置了,tcp.handler設定的類無效,如果沒有找到,它就會去org.apache.jmeter.protocol.tcp.sampler包下找,使用者可以提供他自己的實現類,這個類必須要繼承org.apache.jmeter.protocol.tcp.sampler.TCPClient父類

TCP Sampler實現類介紹:


  • TCPClientImpl
    實現了以文字編輯器中所編輯的純文字為內容進行傳送。最簡單的實現類,也是tcp預設使用的。如果你設定屬性tcp.eolByte(在配置檔案jmeter.properties中),將讀取一行位元組作為響應,其他的情況是通過讀取流的方式,你可以採用平臺預設字元編碼或者你通過設定屬性tcp.charset來設定你想要的編碼。
  • BinaryTCPClientImpl
    以文字編輯器中所編輯的16進位制字元(hex)內容為基礎轉換為二進位制的位元組內容進行傳送。讀取響應的時候反過來。當讀取響應的時候,它會讀取到設定屬性tcp.BinaryTCPClient.eomByte結束符,否則讀取到輸入流的末尾。
  • LengthPrefixedBinaryTCPClientImpl
    繼承BinaryTCPClientImpl,在BinaryTCPClientImpl基礎上預設以傳送內容的長度以位元組字首進行填充,會自動在字首增加內容長度,它預設有兩個位元組,當然你也可以通過屬性tcp.binarylength.prefix.length(在配置檔案jmeter.properties中)進行設定
  • Timeout handling:
    如果你設定超時,讀取流在超時之後會終止,所以當你在使用eolByte/eomByte 確保超時時間設定足夠長,否則讀取流過早終止。

EOL是與讀資料相關的,就是設定來自於伺服器資料流的一個結束標識位元組。沒有設定EOL將會一直讀到輸入流結束為止,這是個十進位制的值(千萬不要寫成hex)
看一個設定EOL的例子
eol
- Response handling:
如果tcp.status.prefix(在配置檔案jmeter.properties中) 被定義了,那麼它會自動搜尋字首和字尾包裹的文字資訊,如果發現了這樣資訊,它將被用來設定響應碼。然而響應資訊可以根據響應碼從屬性檔案中讀取(如果你提供了屬性檔案的話)。
tcp.status.prefix與tcp.status.suffix
可以通過配置一對狀態閉合區域來識別來自伺服器對於一些特殊狀態的標識,比如HTTP的200、300、400、500狀態,對於TCP Sampler預設是無法區分的,但可以通過配置如下屬性,將[]作為閉合區域放在響應資料的最前端作為狀態標識:
tcp.status.prefix=[
tcp.status.suffix=]
這樣可以自定義狀態標識了,並可以對請求響應在properties檔案中進行維護
登入使用者名稱/密碼將不會被用來支援TCP實現。

# status.prefix and suffix = strings that enclose the status response code
tcp.status.prefix=[
tcp.status.suffix=]

sampleResult

responseData

當然這裡可以設定複雜的邊界比如單詞等,例如

tcp.status.prefix=status:
tcp.status.suffix=.

那麼結果將返回
tcpComplex

屬性 描述 是否必須
Name 展示在右側樹形列表的名稱
TCPClient classname 表示處理請求的實現類,預設是TCPClientImpl ,對應屬性設定名為tcp.handler,已知實現TCPClientImpl、BinaryTCPClientImpl、LengthPrefixedBinaryTCPClientImpl
ServerName or IP 伺服器 主機名,ip地址
Port Number
Re-use connection 如果選中,這個連結處於保持開啟狀態,不選中就是讀取資料後就關閉
Close connection 如果選中,這個連結將會在執行中取樣器之後被關閉
SO_LINGER enable/disable(啟用/禁用)SO_LINGER設定特定的值,單位為秒,它線性建立套接字,如果你是設定的值為0,你可以避免大量套接字處於TIME_WAIT (等待狀態)
End of line (EOL) by value 表示一行結束符,如果設定值在-128到127之外將會跳過eol 檢查,你可以在jmeter.properties檔案中增加屬性eolByte進行設定,如果你在TCP Sampler Config中也設定這個屬性,那麼TCP Sampler Config 中設定的將會生效
Connect TimeOUt 連線超時(單位毫秒,0 表示禁用超時)
Response Timeout 連線超時(單位毫秒,0 表示禁用超時)
Set NoDelay 可以參考java.net.Socket.setTcpNoDelay(),如果選中,它將會禁用Nagle’s演算法(利用快取功能),反之
Text to Send 傳送文字資訊
Login User 使用者名稱-它不會使用預設實現
Password 密碼-它不會使用預設實現,(N.B.它在測試計劃中採用非加密儲存)

未完待續……