浅谈重要组件Beanshell

浅谈重要组件Beanshell

BeanShell是JMeter中一个非常实用的组件,它允许用户通过Java-like的脚本语言执行自定义逻辑,从而极大地扩展了JMeter的功能。本文将详细介绍BeanShell的使用方法、常见用途、以及其在JMeter中的具体应用场景。
BeanShell概述
BeanShell是一种轻量级的Java脚本解释器,它支持即席(adhoc)的脚本编写和快速原型开发。在JMeter中,BeanShell可以用于创建动态且高度定制化的测试计划组件,如采样器、前置处理器、后置处理器、断言、计时器和监听器。相比于JMeter的图形界面操作,BeanShell提供了更高的灵活性和编程控制能力。

BeanShell的组件及用途

  1. BeanShell Sampler(取样器)
    ● 用途:执行自定义的Java代码片段,可以用来发送请求、处理响应或执行任何复杂的业务逻辑。
    ● 示例:模拟复杂请求、动态生成请求参数。
  2. BeanShell PreProcessor(前置处理器)
    ● 用途:在主采样器执行前运行,常用于数据预处理,如修改请求参数、设置变量等。
    ● 示例:根据某些条件动态计算变量值。
  3. BeanShell PostProcessor(后置处理器)
    ● 用途:在采样器执行后运行,用于解析响应数据,提取有用信息存储为变量。
    ● 示例:从HTML或JSON响应中提取数据。
  4. BeanShell Assertion(断言)
    ● 用途:提供更灵活的验证机制,通过脚本判断响应是否符合预期。
    ● 示例:对比响应数据与预期值的复杂逻辑验证。
  5. BeanShell Timer(定时器)
    ● 用途:基于条件控制请求间的延迟时间,提供更灵活的定时控制。
    ● 示例:根据服务器响应时间动态调整下一个请求的等待时间。
  6. BeanShell Listener(监听器)
    ● 用途:监听并处理测试结果,可用于日志记录、数据分析等。
    ● 示例:收集测试期间的特定数据,输出至文件或控制台。

应用实例

在BeanShell组件中,以下是一些常用的内置变量,它们可以帮助你访问JMeter上下文中的信息,首先使用SpringBoot编写一个接口,部分代码如下

 @PostMapping(value = "/login",produces = "application/json;charset=UTF-8")
    public String authenticate(@RequestBody JSONObject request) {
   

        String validUsername = "admin";
        String validPassword = "password";

        if (request.getString("username").equals(validUsername) && request.getString("password").equals(validPassword)) {
   
            return "认证成功";
        } else {
   
            return "认证失败";
        }
    }

log关键字

作用:打印日志信息,如 log.info(“This is an info message.”);
编写如下脚本:
在这里插入图片描述
线程组:保持默认
BeanShell 取样器:编写如下脚本

log.info("This is an info message.");
log.warn("This is an warn message.");
log.error("This is an error message.");

运行脚本,查看日志信息:

2024-07-08 16:05:21,685 INFO o.a.j.u.BeanShellTestElement: This is an info message.
2024-07-08 16:05:21,685 WARN o.a.j.u.BeanShellTestElement: This is an warn message.
2024-07-08 16:05:21,685 ERROR o.a.j.u.BeanShellTestElement: This is an error message.

var关键字

作用:操作JMeter局部变量,例如设置变量 vars.put(“myVar”, “value”); 或获取变量 vars.get(“myVar”);
编写如下脚本:
在这里插入图片描述
线程组:保持默认
BeanShell 取样器1:编写如下脚本

String s = "test";
vars.put("val",s);
String value = vars.get("val");
log.info("value变量的值为:" + value);

BeanShell 取样器2:编写如下脚本

log.info("val变量的值为:${val}");

运行脚本,查看日志信息:
2024-07-08 16:31:28,626 INFO o.a.j.u.BeanShellTestElement: value变量的值为:test
2024-07-08 16:31:28,641 INFO o.a.j.u.BeanShellTestElement: val变量的值为:test

props关键字

作用:操作JMeter全局属性,如设置属性 props.put(“PROP_NAME”, “value”); 或读取属性 props.get(“PROP_NAME”);
测试脚本沿用log关键字的脚本,并且将BeanShell 取样器中的内容代码替换如下

props.put("PROP_NAME", "value");
String value = props.get("PROP_NAME");
log.info("PROP_NAME变量的值为:" + value);

运行脚本,查看日志信息:

2024-07-08 16:33:25,939 INFO o.a.j.u.BeanShellTestElement: PROP_NAME变量的值为:value

prev关键字

作用:访问前一个采样器的响应数据等,如获取响应文本 prev.getResponseDataAsString();
编写脚本如下:
在这里插入图片描述
线程组:保持默认
HTTP信息头管理器:添加信息头,名称:content-type,值:application/json;charset=UTF-8
HTTP请求:协议http,服务器名称或IP为127.0.0.1,端口号为8091,请求方法post,路径/login,内容编号utf-8,消息体数据如下:

{
   
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奔波儿灞爱霸波尔奔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值