[转帖]JSR223控件简介

jsr223,控件,简介 · 浏览次数 : 0

小编点评

**JSR223控件简介** JSR223是一个支持脚本语言的 Java 运行环境 (JRE)。它可以用于在 Java 应用程序中执行 JSR223 脚本代码。 **调用内置函数** 可以使用 `prev.getResponseDataAsString()` 获取返回数据的字符串。可以使用 `prev.getResponseCode()` 获取响应代码。 **执行外部java文件** 可以使用 `File` 类读取和写入文件。可以使用 `File` 类的 `FileOutputStream` 和 `FileWriter` 类执行文件写入操作。 **执行jar包** 可以使用 `org.apache.commons.codec.digest.DigestUtils` 类对字节数组进行 MD5 加密。可以使用 `org.apache.commons.codec.digest.DigestUtils` 类中的 `md5Hex()` 方法获取 MD5 加密后的字符串。 **使用方法** 1. 在 JSR223 中定义属性以存储脚本参数。 2. 在 JSR223 代码中调用脚本方法。 3. 在代码中设置响应信息。 **示例** ```java // 属性定义 String scriptPath = "myScript.jsr"; String password = "password"; // 获取返回数据并设置响应代码 String response = prev.getResponseDataAsString(); int statusCode = prev.getResponseCode(); // 设置响应信息 prev.setResponseMessage("这是响应信息"); prev.setResponseCode("404"); // 访问属性 String name = props.get("name"); // 使用 JSR223 属性定义的变量 vars.put("name", name); ``` **注意** * JSR223 的属性和方法名称可能与 Java 的属性和方法名称不同。 * 必须在 JSR223 中使用 `vars.get()` 方法访问属性。

正文


JSR223取样器允许执行JSR223脚本代码用于创建/更新所需的某些变量。
由于JSR223脚本编译方式基本相同,后续将不再介绍如JSR223前置处理器、JSR223后置处理器、JSR223断言、JSR223定时器以及JSR223监听器

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

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

在这里插入图片描述
属性描述
名称:显示的此取样器的描述性名称,可自定义
语言:要使用的JSR223脚本语言的类型
参数:要传递到脚本文件或脚本的参数列表
脚本文件:用于执行的脚本文件,若没有脚本文件,将执行脚本
脚本:传递给JSR223执行的脚本

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

1、调用内置函数

在这里插入图片描述

获取返回数据并转换为String字符串

String Responsedata = prev.getResponseDataAsString();
if(Responsedata.contains("百度一下,你就知道")){
	//如果参数为true,则样本执行判断为成功,为false,则设置样本失败
	prev.setSuccessful(true);
	}else{
		prev.setSuccessful(false);
		}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

获取返回数据并保存为字节数组对象,适用于保存返回数据至本地(如下载文件等操作)

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(); 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

prev.getResponseDataAsString()与prev.getResponseData()都是获取Response Body的内容,只是返回的数据类型不同,prev.getResponseDataAsString()返回String字符串,prev.getResponseData()返回byte[]字节数组,使用时可根据实际需要对返回数据进行处理。
在这里插入图片描述

获取请求头信息

String headers = prev.getRequestHeaders() ;
  • 1

在这里插入图片描述

获取请求返回的code

String code = prev.getResponseCode() ;
  • 1

获取响应信息

String responsesmessage = prev.getResponseMessage() ;
  • 1

在这里插入图片描述

获取响应头信息

String responsesheader= prev.getResponseHeaders() ;
  • 1

在这里插入图片描述

//获取请求URL

URL url = prev.getURL() ;
String url1 = prev.getUrlAsString();
  • 1
  • 2

在这里插入图片描述

设置响应信息Response message

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

设置响应代码Response code

prev.setResponseCode("404");
  • 1

注意:在beanshell脚本中可直接使用
ResponseMessage=“这是响应信息”;
ResponseCode=“404”;
IsSuccess=“false”;
但是在JSR223中不能用,而只能使用prev.set的方法
在这里插入图片描述

打印日志 ,日志会保存在bin目录下的jmeter.log文件中
默认支持级别为info及以上,debug级别日志由于太多,默认不支持

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

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

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

在这里插入图片描述

设置属性与调用属性

${__setProperty(test1,property1,)};
props.put("test2","property2");
String test1 =props.get("test1");
String test2 = props.get("test2");
  • 1
  • 2
  • 3
  • 4

属性是所有线程公有的,需要注意的是,在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");
  • 1
  • 2
  • 3
  • 4

通过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 ;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5

然后在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);
  • 1
  • 2
  • 3
  • 4

执行结果如下:
在这里插入图片描述

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());
  • 1
  • 2
  • 3

调用外部jar

AddTest add = new AddTest();
int sum = add.add(15,10);
log.info("sum is : " + sum);
  • 1
  • 2
  • 3

在这里插入图片描述

</article>

与[转帖]JSR223控件简介相似的内容:

[转帖]JSR223控件简介

JSR223控件简介 1、调用内置函数2、执行外部java文件3、执行jar包 JSR223取样器允许执行JSR223脚本代码用于创建/更新所需的某些变量。 由于JSR223脚本编译方式基本相同,后续将不再介绍如JSR223前置处理器、JSR223后置处理器、JSR223断言、JSR223定时器以及

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

[转帖]HTTPS中间人攻击原理

https://www.zhihu.com/people/bei-ji-85/posts 背景 前一段时间,公司北京地区上线了一个HTTPS防火墙,用来监听HTTPS流量。防火墙上线之前,邮件通知给管理层,我从我老大那里听说这个事情的时候,说这个有风险,然后意外地发现,很多人原来都不知道HTTPS防

[转帖]关于字节序(大小端)的一点想法

https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地

[转帖]awk提取某一行某一列的数据

https://www.jianshu.com/p/dbcb7fe2da56 1、提取文件中第1列数据 awk '{print $1}' filename > out.txt 2、提取前2列的文件 awk `{print $1,$2}' filename > out.txt 3、打印完第一列,然后打

[转帖]awk 中 FS的用法

https://www.cnblogs.com/rohens-hbg/p/5510890.html 在openwrt文件 ar71xx.sh中 查询设备类型时,有这么一句, machine=$(awk 'BEGIN{FS="[ \t]+:[ \t]"} /machine/ {print $2}' /

[转帖]Windows Server 2022 简体中文版、英文版下载 (updated Oct 2022)

https://sysin.org/blog/windows-server-2022/ Windows Server 2022 正式版,2022 年 10 月更新,VLSC Posted by sysin on 2022-10-27 Estimated Reading Time 8 Minutes