Jmeter 中 Beanshell 的使用

部署运行你感兴趣的模型镜像

目录

前言:

Beanshell 介绍

常用内置变量

log

vars 和 props

vars 常用方法:

props 常用方法:

prev

综合运用


前言:

JMeter 是一个广泛使用的性能测试工具,它支持许多不同的测试技术和方法。其中,Beanshell 是一种常用的脚本语言,它可以用来自动化测试脚本的执行和参数化测试。

Beanshell 介绍

Beanshell 是一种轻量级的 Java 脚本,纯 Java 编写的,能够动态的执行标准 java 语法及一些扩展脚本语法,类似于 javaScript,在工作中可能用的多的就是:

  • Beanshell 取样器:跟 Http 取样器并列

  • Beanshell 前置处理器:一般放在 Http 请求下,在请求后处理一些数据

  • Beanshell 后置处理器:一般放在 Http 请求下,在请求前处理一些数据

  • Beanshell 断言:一般放在 Http 请求下,做一些复杂断言

常用内置变量

log

打印日志,我们常常可以用来调试问题,使用举例

  1. log.info("你想打印的内容")
  2. log.error("你想打印的错误内容")

vars 和 props

区别:

  • vars 只能在当前线程内使用,props 可以跨线程组使用
  • vars 只能保存 String 或者 Object,props 是 Hashtable 对象
vars 常用方法:
  1. vars.get(String key):从 jmeter 中获得变量值;
  2. vars.put(String key,String value):数据存到 jmeter 变量中;
props 常用方法:
  1. props.put("token","ertyuiahdg127423g4hjdkacnb");
  2. props.get("token");
prev

获取前面的 sample 返回的信息,常用方法:

  1. prev.getResponseDataAsString():获取响应信息
  2. prev.getResponseCode() :获取响应 code

综合运用

一般来说,我们接口返回都是标准的 json 格式数据,例如:

{"datas":[
{"name":"张三","age":18,"address":"河北","phone":"1311111111"},
{"name":"李四","age":28,"address":"北京","phone":"13222222222"},
{"name":"王五","age":23,"address":"江苏","phone":"13333333333"},
{"name":"赵六","age":32,"address":"湖北","phone":"13444444444"},
{"name":"玛丽","age":45,"address":"美国","phone":"13555555555"},
{"name":"亨利","age":39,"address":"法国","phone":"13666666666"}]
}

那我就需要使用一些专门处理 json 数据的 jar 包来对数据进行二次加工,这里举例使用 json.jar,具体代码如下:

//从json.jar导入所需要的类
import org.json.JSONObject;
import org.json.JSONArray;

//从变量获取数据,因为我在用户自定义变量设置的上面的json数据
String response = vars.get("response");
// 打印日志看看是否取到
log.info("看看response:"+response);
//String reponse = prev.getResponseDataAsString();//如果从接口取,可以这么写

// String 转化成JSONObject
JSONObject resObj = new JSONObject(response);
// 去除datas下的数据
JSONArray resArray = resObj.get("datas");
log.info("取出resArray:"+resArray.toString());//注意,需要把array转成String才能打印

// 遍历取出年龄>30的数据,并存入新的JSONObject
JSONObject newObj = new JSONObject();//定义一个空的JSONObject
for(JSONObject item:resArray){
  int age = item.get("age");//取出age
if(age>30){
String name = item.get("name");//取出name作为key
    newObj.put(name,age);
  }
}
// 打印下取出的数据正确与否
log.info("大于30的人:"+newObj.toString());
// 存入变量,供下面接口使用
vars.put("newObj",newObj.toString());

  作为一位过来人也是希望大家少走一些弯路

在这里我给大家分享一些自动化测试前进之路的必须品,希望能对你带来帮助。

(软件测试相关资料,自动化测试相关资料,技术问题答疑等等)

相信能使你更好的进步!

点击下方小卡片

您可能感兴趣的与本文相关的镜像

PyTorch 2.6

PyTorch 2.6

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

### BeanShell 脚本语法详解 BeanShell 是一种完全符合 Java 语法规范的脚本语言,同时具备一些独特的语法和方法,使其更加灵活。BeanShell 是用 Java 编写的,是一个小型的、免费的、可嵌入的 Java 源代码解释器,具有对象脚本语言特性,非常适合在 JMeter 中进行脚本编写和调试 [^3]。 #### 基本语法 BeanShell 的语法与 Java 非常相似,但它也支持松散类型,这意味着变量不需要显式声明类型。例如: ```java // 声明变量 int a = 10; String b = "Hello"; // 松散类型变量 c = 20; d = "World"; // 输出变量 print(a); print(b); print(c); print(d); ``` #### 控制结构 BeanShell 支持常见的控制结构,如 `if` 语句、`for` 循环、`while` 循环等: ```java // if 语句 if (a > 5) { print("a is greater than 5"); } else { print("a is less than or equal to 5"); } // for 循环 for (i = 0; i < 5; i++) { print(i); } // while 循环 i = 0; while (i < 5) { print(i); i++; } ``` #### 函数定义 BeanShell 允许定义函数,这些函数可以接受参数并返回值: ```java // 定义函数 function add(a, b) { return a + b; } // 调用函数 result = add(5, 10); print(result); ``` #### 内置变量和对象 在 JMeter使用 BeanShell 时,可以访问一些内置变量和对象,这些变量和对象可以帮助你更好地与 JMeter 进行交互。例如,`vars` 对象可以用来访问和设置 JMeter 变量: ```java // 设置 JMeter 变量 vars.put("myVar", "Hello World"); // 获取 JMeter 变量 myVar = vars.get("myVar"); print(myVar); ``` #### 调试和测试 由于 BeanShell 内置了一些特有的变量,无法在一些集成代码工具上进行调试。因此,在编写和调试 BeanShell 脚本时,通常需要直接在 JMeter 中进行测试 [^2]。 #### 示例:使用 BeanShell 预处理器 在 JMeter 中,可以使用 BeanShell 预处理器来修改请求参数。例如,可以在 HTTP 请求采样器之前添加一个 BeanShell 预处理器,以动态生成请求参数: ```java // 生成动态参数 currentDate = new Date(); vars.put("timestamp", currentDate.getTime() + ""); ``` 然后在 HTTP 请求采样器中使用 `${timestamp}` 来引用这个动态生成的参数。 ### 相关问题 1. 如何在 JMeter使用 BeanShell 脚本进行参数化? 2. BeanShell 脚本中如何处理异常和错误? 3. 如何在 JMeter调试 BeanShell 脚本? 4. BeanShell 脚本中如何调用外部 Java 类和方法? 5. BeanShell 脚本中如何处理 JSON 数据?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值