Jmeter 元件 JSR223 使用詳解

Tester_謎城發表於2020-08-13

JSR223控制元件簡介

JSR223控制元件允許執行JSR223指令碼程式碼用於建立/更新所需的某些變數。
包括JSR223取樣器、JSR223前置處理器、JSR223後置處理器、JSR223斷言、JSR223定時器以及JSR223監聽器

相比於BeanShell 取樣器,JSR223取樣器+groovy指令碼具有可大大提高效能的功能(編譯),同時支援更多的指令碼語言,其中包括BeanShell指令碼,所以在編寫指令碼時不建議使用BeanShell 取樣器,如果需要,使用JSR223取樣器編寫指令碼是更好的選擇。

由於本人只瞭解JAVA,所以以下指令碼說明,均基於JSR223+groovy的java語法編寫進行,其他語言指令碼我也不懂,請自行參閱。

在這裡插入圖片描述
屬性描述
名稱:顯示的此取樣器的描述性名稱,可自定義
語言:要使用的JSR223指令碼語言的型別
引數:要傳遞到指令碼檔案或指令碼的引數列表
指令碼檔案:用於執行的指令碼檔案,若沒有指令碼檔案,將執行指令碼
指令碼:傳遞給JSR223執行的指令碼

如果提供了指令碼檔案,則執行指令碼檔案,否則執行指令碼。

JSR223用法詳解

1、呼叫內建函式

在這裡插入圖片描述

獲取返回資料並轉換為String字串
String Responsedata = prev.getResponseDataAsString();
if(Responsedata.contains("百度一下,你就知道")){
//如果引數為true,則樣本執行判斷為成功,為false,則設定樣本失敗
prev.setSuccessful(true);
}else{
prev.setSuccessful(false);
}

獲取返回資料並儲存為位元組陣列物件,適用於儲存返回資料至本地(如下載檔案等操作)
import java.io.*;
byte[] bytes = prev.getResponseData();
String file_path = "F:/download/test.html";
File file = new File(file_path);
FileOutputStream out = new FileOutputStream(file);
out.write(bytes);
out.close();

prev.getResponseDataAsString()與prev.getResponseData()都是獲取Response Body的內容,只是返回的資料型別不同,prev.getResponseDataAsString()返回String字串,prev.getResponseData()返回byte[]位元組陣列,使用時可根據實際需要對返回資料進行處理。
在這裡插入圖片描述

獲取請求頭資訊
String headers = prev.getRequestHeaders() ;
在這裡插入圖片描述

獲取請求返回的code
String code = prev.getResponseCode() ;
獲取響應資訊
String responsesmessage = prev.getResponseMessage() ;
在這裡插入圖片描述

獲取響應頭資訊
String responsesheader= prev.getResponseHeaders() ;
在這裡插入圖片描述

//獲取請求URL
URL url = prev.getURL() ;
String url1 = prev.getUrlAsString();
在這裡插入圖片描述

設定響應資訊Response message
prev.setResponseMessage("這是響應資訊");
設定響應程式碼Response code
prev.setResponseCode("404");

注意:在beanshell指令碼中可直接使用
ResponseMessage="這是響應資訊";
ResponseCode="404";
IsSuccess="false";
但是在JSR223中不能用,而只能使用prev.set的方法
在這裡插入圖片描述

列印日誌 ,日誌會儲存在bin目錄下的jmeter.log檔案中
預設支援級別為info及以上,debug級別日誌由於太多,預設不支援
log.error("This is error message");

OUT功能等同於System.out,將在Jmeter工作臺輸出資訊
OUT.println("此訊息將被輸出到Jmeter控制檯");
在這裡插入圖片描述

設定屬性與呼叫屬性
${__setProperty(test1,property1,)};
props.put("test2","property2");
String test1 =props.get("test1");
String test2 = props.get("test2");

屬性是所有執行緒公有的,需要注意的是,在JSR223或BeanShell中使用props.put(”name”,”value”)建立的屬性,不能直接在當前JSR223或BeanShell中使用${__P(name,)}或${__property(name,,)}進行呼叫,如果需要在當前JSR223或BeanShell中呼叫,需要使用props.get("name")方法。此處的name是屬性名稱,而不是隨機的字串。

定義變數與呼叫變數
此處的name是在使用者定義的變數中定義的變數,已賦值為lucy
String test5 = vars.get("name");
//定義變數值,並獲取
vars.put("name2","jack");
String test6 = vars.get("name2");

通過vars.put(“name”,”value”)方式定義的變數作用域限制為當前執行緒組,如果要跨執行緒呼叫,請使用屬性定義,與props.put(”name”,”value”)同樣的,vars.put(“name”,”value”)建立的變數,也不能直接在當前JSR223或BeanShell中使用${name}進行呼叫,而是使用vars.get("name")方法。

2、執行外部java檔案

新建一個Java檔案,新增如下程式碼

public class AddTest {
public int add(int a ,int b){
return a+b ;
}
}

然後在JSR223中引入原始檔並執行,執行方法與JAVA本身的方法一致
//引入原始檔
source("F:/apache-jmeter-5.3/TestPlan/AddTest.java");
AddTest add = new AddTest();
int sum = add.add(15,20);
log.info("sum is : " + sum);
執行結果如下:
在這裡插入圖片描述

3、執行jar包

JSR223可呼叫外部jar包,也可以呼叫Jmeter提供的內部jar包,通常將我們寫的程式碼打包成jar包後,有兩種方法可以引入jar包,Jar包方法呼叫與JAVA語法一致。
1、將jar包放到Jmeter安裝目錄的\lib\ext目錄下
2、在測試計劃中匯入
在這裡插入圖片描述

呼叫Jmeter內建MD5加密
import org.apache.commons.codec.digest.DigestUtils;
String password = DigestUtils.md5Hex("password");
vars.put("password",password.toUpperCase());

呼叫外部jar
AddTest add = new AddTest();
int sum = add.add(15,10);
log.info("sum is : " + sum);
在這裡插入圖片描述

相關文章