jsr223 java_Jmeter 组件 JSR223 使用详解

本文详细介绍了JSR223在JMeter中的各种组件,如取样器、前置处理器等,强调了JSR223相比BeanShell的性能优势。内容包括使用Groovy脚本处理响应数据、设置响应状态、调用内部函数和执行外部Java及jar包。同时,文中还解释了如何设置和调用属性、变量,以及日志打印的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSR223 控件简介

JSR223 控件允许执行 JSR223 脚本代码用于创建/更新所需的某些变量。

包括 JSR223 取样器、JSR223 前置处理器、JSR223 后置处理器、JSR223 断言、JSR223 定时器以及 JSR223 监听器

相比于 BeanShell 取样器,JSR223 取样器 +groovy 脚本具有可大大提高性能的功能(编译),同时支持更多的脚本语言,其中包括 BeanShell 脚本,所以在编写脚本时不建议使用 BeanShell 取样器,如果需要,使用 JSR223 取样器编写脚本是更好的选择。

由于本人只了解 JAVA,所以以下脚本说明,均基于 JSR223+groovy 的 java 语法编写进行,其他语言脚本我也不懂,请自行参阅。

da882381a79e4b5acc9ab5c74188a8b8.png

属性描述

名称:显示的此取样器的描述性名称,可自定义

语言:要使用的 JSR223 脚本语言的类型

参数:要传递到脚本文件或脚本的参数列表

脚本文件:用于执行的脚本文件,若没有脚本文件,将执行脚本

脚本:传递给 JSR223 执行的脚本

如果提供了脚本文件,则执行脚本文件,否则执行脚本。

JSR223 用法详解

1、调用内置函数

c3ec6d3b7b628bd32eeb38fd22447afd.png

获取返回数据并转换为 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[] 字节数组,使用时可根据实际需要对返回数据进行处理。

0b5287884b03312958a07e7a6d26fdb6.png

获取请求头信息

String headers = prev.getRequestHeaders() ;

987b588694bcfb97c2ff428fa9e53560.png

获取请求返回的 code

String code = prev.getResponseCode() ;

获取响应信息

String responsesmessage = prev.getResponseMessage() ;

e82f530447e09c78e6a2a5c0ce915e60.png

获取响应头信息

String responsesheader= prev.getResponseHeaders() ;

24cea1f13ce7c312e4702b340f1c5a77.png

//获取请求 URL

URL url = prev.getURL() ;

String url1 = prev.getUrlAsString();

8169f66d44d5123bfbdee7fd929da1bc.png

设置响应信息 Response message

prev.setResponseMessage("这是响应信息");

设置响应代码 Response code

prev.setResponseCode("404");

注意:在 beanshell 脚本中可直接使用

ResponseMessage="这是响应信息";

ResponseCode="404";

IsSuccess="false";

但是在 JSR223 中不能用,而只能使用 prev.set 的方法

0afc9c7ef7ff9ba92b2e024eb58e9b6b.png

打印日志 ,日志会保存在 bin 目录下的 jmeter.log 文件中

默认支持级别为 info 及以上,debug 级别日志由于太多,默认不支持

log.error("This is error message");

OUT 功能等同于 System.out,将在 Jmeter 工作台输出信息

OUT.println("此消息将被输出到 Jmeter 控制台");

2a39450bc9e1fba13b7852f57736df43.png

设置属性与调用属性

${__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);

执行结果如下:

821b616841f54a3086bbd310474a409b.png

3、执行 jar 包

JSR223 可调用外部 jar 包,也可以调用 Jmeter 提供的内部 jar 包,通常将我们写的代码打包成 jar 包后,有两种方法可以引入 jar 包,Jar 包方法调用与 JAVA 语法一致。

1、将 jar 包放到 Jmeter 安装目录的\lib\ext 目录下

2、在测试计划中导入

99250361d97a44ff4819dfbbeb05ef56.png

调用 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);

36a2533a08915645c79bfb1e84608121.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值