Jmeter 元件 JSR223 使用詳解
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);
相關文章
- Jmeter JDBC Request 使用詳解JMeterJDBC
- Jmeter(八) - 從入門到精通 - JMeter配置元件(詳解教程)JMeter元件
- 『動善時』JMeter基礎 — 32、JMeter察看結果樹元件詳解JMeter元件
- jmeter JSR223 preprocessor javascript 介面資訊加密JMeterJSJavaScript加密
- Jmeter系列(40)- 詳解 Jmeter CLI 模式JMeter模式
- Jmeter關聯詳解JMeter
- JMeter學習筆記--詳解JMeter定時器JMeter筆記定時器
- Jmeter系列(30)- 詳解 JDBC RequestJMeterJDBC
- Jmeter系列(21)- 詳解 HTTP RequestJMeterHTTP
- Jetpack 之 LifeCycle 元件使用詳解Jetpack元件
- spring元件掃描使用詳解Spring元件
- jmeter學習指南之詳解jmeter執行緒組JMeter執行緒
- 『動善時』JMeter基礎 — 28、JMeter函式助手詳解JMeter函式
- 『動善時』JMeter基礎 — 54、JMeter聚合報告詳解JMeter
- Jmeter系列(50)- 詳解 If 控制器JMeter
- JMeter—配置元件(七)JMeter元件
- JMeter配置元件(一)JMeter元件
- JMeter配置元件(二)JMeter元件
- 『動善時』JMeter基礎 — 12、JMeter取樣器詳解:samplerJMeter
- 『動善時』JMeter基礎 — 29、JMeter響應斷言詳解JMeter
- 『動善時』JMeter基礎 — 31、JMeter中BeanShell斷言詳解JMeterBean
- 『動善時』JMeter基礎 — 20、JMeter配置元件【HTTP Cookie管理器】詳細介紹JMeter元件HTTPCookie
- Jmeter系列(34)- 詳解 Counter 計數器JMeter
- Jmeter系列(27)- 詳解正則提取器JMeter
- Jmeter(十九) - 從入門到精通 - JMeter監聽器 -上篇(詳解教程)JMeter
- Jmeter(二十) - 從入門到精通 - JMeter監聽器 -下篇(詳解教程)JMeter
- Jmeter(十四) - 從入門到精通 - JMeter定時器 - 下篇(詳解教程)JMeter定時器
- Jmeter(十三) - 從入門到精通 - JMeter定時器 - 上篇(詳解教程)JMeter定時器
- 『動善時』JMeter基礎 — 39、JMeter中如果(If)控制器詳解JMeter
- 『動善時』JMeter基礎 — 30、JMeter中JSON斷言詳解JMeterJSON
- jmeter之JDBC類元件JMeterJDBC元件
- Kafka核心元件詳解Kafka元件
- ReactNative元件詳解React元件
- Jmeter(二十一) - 從入門到精通 - JMeter斷言 - 上篇(詳解教程)JMeter
- Jmeter(二十二) - 從入門到精通 - JMeter斷言 - 下篇(詳解教程)JMeter
- 『動善時』JMeter基礎 — 40、JMeter中ForEach控制器詳解JMeter
- Jmeter(二十三) - 從入門到精通 - JMeter函式 - 上篇(詳解教程)JMeter函式
- Jmeter(二十四) - 從入門到精通 - JMeter函式 - 中篇(詳解教程)JMeter函式