javascript
jsr223 java_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);
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的jsr223 java_Jmeter 组件 JSR223 使用详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java连接open fire_java
- 下一篇: java伪协议_JavaScript中伪