jmeter--JSR223組件常用方法


   JSR是Java Specification Requests的縮寫,意思是Java規范提案。JSR已成為Java界的一個重要標准.

   JSR223 控件允許執行 JSR223 腳本代碼用於創建/更新所需的某些變量。

   JSR223 取樣器 +groovy 腳本可大大提高性能的功能(編譯),同時支持更多的腳本語言,其中包括 BeanShell 腳本,但是BeanShell 腳本編譯效率更高。所以在編寫腳本時不建議使用 BeanShell 取樣器。

   使用JSR223組件首先要選擇腳本語言。

   JSR223定義了可集成在Java平台上運行的一系列腳本語言。比如Groovy,JavaScript等.用的最多的是Groovy。Groovy 語法與Java 語言的語法很相似,Groovy 和 Java 語言的主要區別是:完成同樣的任務所需的 Groovy 代碼比 Java 代碼更少。

  以下jsr233 preprocessor為例:

 

 

 

 

 

 

 

 

 

名詞解釋:

名稱:顯示的此取樣器的描述性名稱,可自定義

語言:要使用的JSR223腳本代碼語言的類型。本例我們選擇groovy。

參數:要傳遞到腳本文件或腳本的參數列表。多個參數以“;”分隔。

腳本文件:用於執行的腳本文件,若沒有腳本文件,將覆蓋腳本。

腳本:傳遞給JSR223執行的腳本,編寫代碼。

 

查看jmeter變量信息:

點擊右上角三角按鈕。調用logview窗口,來查看變量信息。

 

 

 

 

1、log

用法:寫入日志文件。在編寫測試計划腳本時進行調試非常有用。

日志有3個級別:info、warn和error。根據需要可以使用相應級別的日志。

注意:有錯誤級別的日志時,右上角的三角形狀態將增加1。

 

 

2、OUT

用法:在控制台中打印消息。與log的區別是顯示消息的位置不一樣。

注意:在groovy語句下,也可不寫OUT,只用println方法也可打印信息顯示在控制台。

 

 

 

 

3、vars

   3.1   提供read(get)/write(put)方法去訪問變量。

   變量包括:用戶自定義、Regex提取器提取、JSON提取器從響應數據中提取等。

   讀方法:vars.get(“VARIABLE_NAME”);

   寫方法:vars.put(“VARIABLE_NAME”,“VALUE”);

寫入后,可以訪問role_id。

3.2  提供對象、數組的訪問。

     方法:vars.getObject(“OBJECT_NAME”);

                vars.putObject(“OBJECT_NAME”, OBJECT_NAME);

    例子:jsr1:定義一個函數作為對象:

 

     jsr2:調用函數對象:

 

4、props

  用法:與vars相同,但用於JMeter屬性。vars僅作用於當前線程。props作用於多線程。

  方法:props.get(“PROPERTIES_NAME”);

            props.put(“PROPERTIES_NAME”, PROPERTIES_NAME);

  例子:讀取線程中屬性值。

 

 

 

   讀取屬性值用法如下。當然,也可以采用函數${_setProperty(newprops,new_props)}方法來實現下面的語句。

 屬性列表查看:

 

 設置完屬性后,可用__P()或者__property()函數來訪問。

 

 引用的屬性值:

 

 props是Hastable的子類,因此我們可以使用put來存儲Object、List、Map等。我們可以在一個線程組中創建一個函數,使用props.put()方法存儲,然后在另一個線程組中使用props.get()調用它。(注意區分,vars使用的調用其他方法函數是vars.getObject()和vars.putObject())。

 

5、SampleResult

    用法:SampleResult幫助獲取/設置運行后樣本的值,例如:ResponseCode、ResponseMessage、StartTime、SampleLabel等。

    注意:如果腳本中直接使用SampleResult類型,需要先導入 org.apache.jmeter.samplers.SampleResult類。

 

    方法:主要包括get和put方法:

     SampleResult.getSampleLabel();
     SampleResult.getStartTime();
     SampleResult.getResponseCode()
     SampleResult.getResponseMessage()
     SampleResult.getPreviousResult() ·返回值:SampleResult,即取樣器結果.作用:獲取前一個取樣器的結果

6、prev
   用法:prev是內置對象,與SampleResult的作用相同,SampleResult中的所有方法都可以通過prev.來調用。運行后可以獲取/設置樣本的幾乎所有信息。jmeter默認會初始化SampleResult類。

   prev對象可以直接引用SampleResult類中的方法,不需要導入。

  即下面兩段代碼效果一致。

import org.apache.jmeter.samplers.SampleResult;

// 獲取取樣器結果
SampleResult result = ctx.getPreviousResult();
// 獲取請求頭
String RequestHeaders =result.getRequestHeaders();
// 獲取請求頭
String RequestHeaders =prev.getRequestHeaders();

 


   方法get:
   prev.getTime()
   prev.getThreadName()
   prev.getBytesAsLong()
   prev.getURL()//獲取url對象,轉換成字符串需要prev.getUrlAsString();
   prev.isSuccessful()
   prev.getRequestHeaders() //獲取請求頭信息,String

 

   prev.getResponseHeaders()//獲取返回信息頭,String
   prev.getResponseCode() //獲取請求返回的code,string
   prev.getResponseMessage() //獲取響應信息,String
   prev.getResponseDataAsString()//獲取返回數據並轉換為String字符串
   prev.getResponseData()//獲取返回數據並保存為字節數組對象.
   注意:prev.getResponseDataAsString()與prev.getResponseData()都是獲取Response Body的內容,只是返回的數據類型不同,prev.getResponseDataAsString()返回String字符串,prev.getResponseData()返回byte[]字節數組,使用時可根據實際需要對返回數據進行處理。


  方法set:

  與get方法相同,我們可以訪問采樣器的所有信息並根據需要設置值。
  prev.setResponseCode();//設置返回代碼
  prev.setResponseMessage();//設置返回信息
  prev.setSampleLable();//設置樣品標簽
  prev.setSuccessful();//設置相應是否成功

7、sampler

 用法:允許訪問當前采樣器。這意味着我們可以在運行之前獲取/設置采樣器的一些信息,例如:域、路徑、端口、協議、方法

 方法:get/set方法。

8、ctx

  用法:助於訪問上下文。使用ctx我們可以獲得一些信息,比如SampleResult或prev,但是它的級別更高。ctx 映射為 org.apache.jmeter.threads 的 JMeterContext 類 。由於JMeterContext 不具有線程安全性,故僅適用於在單線程中使用 。

  方法:

  getPreviousResult()//獲取前一個取樣器結果

 舉例:

// 獲取取樣器結果,返回累心為SampleResult
SampleResult result = ctx.getPreviousResult();
// 獲取請求頭
String RequestHeaders = result.getRequestHeaders();
// 獲取響應頭
String ResponseHeaders = result.getResponseHeaders();
// 獲取響應碼
String responseCode = result.getResponseCode();
// 獲取響應數據
String responseData = result.getResponseDataAsString();

   getVariables()//獲取JMeter當前線程的所有變量.

   getProperties()//獲取所有的JMeter屬性

   getCurrentSampler()//獲取當前取樣器對象

   getPreviousSampler()//獲取前一個取樣器對象

9、parameters

  用法:要傳遞給腳本文件或腳本的參數列表。您可以使用以下預定義變量訪問在JSR223采樣器/后預處理器中輸入的值。

  parameters:返回在參數字段中定義的所有值。

  args:返回參數數組。

  args.length:返回參數字段中值的數目。

  args[n]: ith n=0,1,2…返回相應位置的值。注意:多個值必須用空格隔開。

  一般來說,Get請求用Parameters,Post請求用Body Data。

 


免責聲明!

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



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