jmeter 使用beanshell 编写脚本

news2024/12/24 21:06:29

一、介绍

1.1 介绍

BeanShell是一个小型的、免费的、可嵌入使用Java编写的具有对象脚本语言特性的Java源码解释器。

动态执行所有Java语句、Java代码片段以及弱类型Java和附加的脚本的便利
透明地访问所有Java对象和API
四种运行模式:命令行、控制台、Applet、远程会话服务
可以在受安全限制的环境下工作,不需要类加载器或者绝大多数功能的字节码生成器
程序只有大约150K的Jar文件
纯Java
免费
 

编写baanshell脚本,使用的语言,几乎跟java一模一样。

1.2 下载&启动

下载:

BeanShell下载地址是:www.beanshell.org

 下载下来是一个jar包,bsh-2.0b4.jar

启动:

启动有四种方式,我只用一种方式,其他的可以去百度一下。

在终端中,执行命令

 java -jar bsh-2.0b4.jar

 二、jmeter中创建beanshell脚本

 线程组--》添加--》取样器/sampler --》 BeanShell 取样器

 脚本文件:我们可以直接引入写好的脚本

脚本:我们自己在jmeter中手写脚本的地方。

三、jmeter与beanshell 数据交互

jmeter与beanshell 数据交互,是通过函数实现的。

vars(JMeterVariables) : 操作jmeter 变量,常用方法:

vars.get(String key) : 从jmeter中获得变量值

vars.put(String key,String value): 将数据存到jmeter变量中。

-------小技巧---------------------

我们可以先在idea中,编写beanshell脚本,写完之后,再复制到jmeter中。(因为jmeter 编写脚本时,不方便,没有错误提示等功能)

3.1 例子1 beanshell 将变量传给jmeter

beanshell 脚本:

a= 1;
b=4;
q = a+b;
vars.put("q",q+"")

运行,然后去结果树中,查看日志。

 注意:

在脚本中,put q时,为啥要+“” ?

因为put函数,key 与value 都要求是String格式的,但是在我们的这个脚本中,得到的q的值是

int类型的,所以要先转成String再put。(int+Sttring=String)

vars.put(String key,String value):

3.2 例子二  jmeter 接收beanshell 生成的变量

背景:

一个接口请求,传参,要求传当前的时间,且格式为 yyyy-MM-dd HH:mm:ss 

处理方案:

beanshell 脚本,将当前时间,格式化为  yyyy-MM-dd HH:mm:ss 格式,然后将值传给jmeter

整个jmeter 脚本结构

beanshell脚本编写:

import java.text.*;
import java.util.*;
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = new Date();
String dateStr = df.format(d);
vars.put("current_date",dateStr);

HTTP 请求,接收参数,current_date

${current_date}

运行jmeter脚本,查看结果树。

 变量引用成功。

四、jmeter中Beanshell 调用 java 代码

4.1 调用java文件

语法:

source(" java 文件路径") 其中文件路径可以使用绝对路径,也可以使用相对路径。

source("E:\eclipse\workspace\MD5\src\jmeter\MD5.java"); 或者: source("MD5.java"); --文件位于 jmeter bin 目录下

String strMd5 = MD5.GetMD5Code("123456");

举例:

1、我自定义了一个类CsDIY.java

package bingfa;
import java.text.*;
import java.util.*;

public class CsDIY {
    public String getCurrentDate(){
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date d = new Date();
        String dateStr = df.format(d);
        return dateStr;
    }

}


然后将CsDIY.java 放置在了我电脑桌面上。

2、Beanshell脚本,引用CsDIY.java这个类,并调用其中方法

source("/Users/zhaohui/Desktop/CsDIY.java");
CsDIY cs = new CsDIY();
String dateSSS = cs.getCurrentDate();
vars.put("dateSSS",dateSSS)

3、接口请求,使用变量

4.2  beanshell调用外部 jar 包

1、提前把 jar 包放入 jmeter lib\ext 目录下并重启;

2、在jmeter 线程组下,添加http sampler->BeanShell Sampler

3、在beasnshell 中的头文件,导入该jar包

import 类名;

示例:

import com.MD5;

String strMd5 = MD5.GetMD5Code("123456");

五、beanshell 打印日志

log: 写入信息到jmeter.log文件中,使用方法:

log.info("这里是日志");

报错:

ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval    In file: inline evaluation of: `

WARN o.a.j.p.j.s.BeanShellSampler: Exception executing script. org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval    In file: 

报错处理:

我没搞定哇。。

六、线程组1生成的动态变量给线程组2用

6.1 背景:

测试计划下,两个线程组,线程组1和线程组2。 需要将线程组1 beanshell 脚本产生的变量,给线程组2 用。

6.2 独立运行线程组:

当运行测试计划时,线程组1与线程组2是同时运行的。我们需要先运行线程组1,再运行线程组2,为了保证线程组运行顺序,我们需要在测试计划中,勾选独立运行线程组。

 

6.3 解决思路及方案

思路:

1、线程组1生成变量时,将变量设置为全局变量。

props.put("xx",xxx);

2、线程组2,取变量时,取这个全局变量

props.get("xx")

方案一:使用beanshell 

在线程组2中,写一个beanshell  脚本,使用props.get("xx") 去取变量

方案二:使用函数助手

工具--函数助手--BeanShell

在表达式中,填写 props.get("xx")

然后点击生成

再在线程组2中,直接使用${__BeanShell(props.get("dateSSS"),)}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构专题 -- 哈希思想详解

代码会存放在: https://github.com/sjmshsh/Data-Struct-HandWriting 通过阅读本篇文章,你可以学到: 哈希思想及其本质使用C实现简易的哈希表哈希思想的应用 位图布隆过滤器哈希切分极致升华,海量数据处理面试题 拓展 – 一致性…

二叉树的应用——哈夫曼树

哈夫曼树与哈夫曼编码 1.树的带权路径长 百分制成绩转五级制的算法流程图(A/B/C/D/E的人数分别为6/18/21/36/19)带权路径长 路经长 x 权重 树的带权路经长:所有叶结点的带权路径长度之和。 例如: (a)图…

[ 攻防演练演示篇 ] 利用谷歌 0day 漏洞上线靶机

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

橘子学kafka之基础命令使用

本系列主要开始处理关于kafka的一些技术知识点,尽量会以代码和实际命令为主要表达形式来做表现。 本文主要是关于如何在客户端使用命令做一个描述,其实我本来不想写的,但是今天在公司有同事居然不会,所以我觉得还是描述一下。而且…

贪心算法合集

95 分糖果问题 思路非常简单,和题解一模一样: 用数组存每个人对应的糖果数量,初始为1 从左到右遍历,如果比左边的大,1再从右到左遍历,如果比右边的大,1 import java.util.*;public class Solu…

录屏大师电脑版推荐(一键录制声画同步的视频)

很多小伙伴使用电脑多年,却不知道电脑有录屏功能。想要对电脑屏幕进行录制,只需在电脑上安装一个录屏大师。那有没有录屏大师电脑版推荐呢?在试用了多款电脑录屏大师之后,小编今天给大家推荐一款可以一键录制声画同步视频的录屏大…

使用Python为二年级的学生批量生成数学题

文章目录一.使用Python为二年级的学生批量生成数学题1.1 背景二.解决思路及其代码三.排版及其打印四.本文源码一.使用Python为二年级的学生批量生成数学题 1.1 背景 我妹妹今年上二年级,她的老师今天给他们布置了一项作业: 从今天起到开学,…

ENSP的AR40问题解决

AR40以及其他相关问题都可以参考此方法,都已经可以正常使用 现在有enspAR40问题的同学有救了,ensp的AR40问题困扰了我很长时间,根据官方的问题解决文档没有解决,反正就是之前的所有方法都没有用,也不是都没有用&#x…

初读《编程之美》就想秀一下,结果还翻车了

文章目录 一、前言 二、我的思路 三、Code 四、翻车现场 五、后续问题 一、前言 ———如何写一个短小的程序,让 Windows 的任务管理器显示CPU的占用率为50%? 这道有趣的面试题我是这两天从《编程之美》电子版中看到的,看意思就是邹老师在微软对一…

入门postgre sql(PG的下载和安装,包括普通用户源码构建的安装方式)

目录PG的下载安装1、Windows 上安装2、Linux上安装有root权限的安装无root权限的安装PG的下载安装 点击这里,了解pg 1、Windows 上安装 (1)下载安装 访问官网下载地址 https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 下载最新发布的Po…

3.kafka-3.生产者,消费者

文章目录1.个性化配置,增加吞吐量2.发送事务消息3.消费组手动提交offset指定offset位置进行消费指定时间消费当新增消费者,或者消费组时,如何消费漏消息和重复消息如何解决消费解压问题1.个性化配置,增加吞吐量 private static vo…

使用 .NET 7、Blazor 和 .NET MAUI 构建你自己的 Podcast App

.NET Podcast App 首次在 .NET Conf 2021上推出,最近进行了更新以在 .NET Conf 2022 keynote 中突出显示 .NET 7 中的新功能。该 Podcast App 已准备好使用展示 .NET,ASP.NET Core,Blazor,.NET MAUI,Azure Container A…

Android 蓝牙开发——概述(一)

一、蓝牙简介 蓝牙技术是一种无线数据和语音通信开放的全球规范,它是基于低成本的近距离无线连接,为固定和移动设备建立通信环境的一种特殊的近距离无线技术连接。 其中将1.x~3.0之间的版本称之为经典蓝牙,4.x开始的蓝牙称之为低功耗蓝牙&…

Memcache学习总结

这里写自定义目录标题介绍一致性哈希寻找节点一致性哈希介绍内存管理slab结构寻找存储chunkChunk中存储的Item数据结构grow factor 调优回收删除一些特性介绍 基于内置内存Key-Value形式存储数据(字符串、对象)集群服务器是通过数组链表方式存储K-V数据<分布式>基于哈希…

编程语言那么多,我为什么推荐你学Java?

Java一直都是稳居排行榜第一的语言&#xff0c;在未来10年Java都会是最热门的语言之一&#xff0c;因为Java技术具有卓越的通用性、高效性、安全性和平台移植性&#xff0c;它可以跨平台的应用到不同的领域&#xff0c;工作需求足够大。 为什么选择学习Java编程语言&#xff1…

更具科技感的中塔机箱,模块设计兼容性强,鑫谷昆仑御风机箱上手

大家装机的时候应该都接触过鑫谷的机箱和散热器外设&#xff0c;作为一家有年头的外设品牌&#xff0c;这两年鑫谷推陈出新&#xff0c;像是在电源方面&#xff0c;就有不少很受欢迎的产品&#xff0c;像是昆仑系列等&#xff0c;前端鑫谷在昆仑系列中带来了一款设计新颖的机箱…

琥珀酰亚胺-双硫键-琥珀酰亚胺NHS-SS-NHS双端活性酯二硫键交联剂

名称:NHS-SS-NHS 中文名称:活性酯-双硫键-活性酯 琥珀酰亚胺-双硫键-琥珀酰亚胺 分子式 :C14H16N2O10S2 分子量 :436.41 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 用 途&#xff1a;仅供科研实验使用&#xff0c;不用于诊治 外观: 固体或粘性液体&am…

VMwareWorkstationPro16的下载与安装,以及vm账号注册的问题

VMwareWorkstationPro16的下载与安装&#xff0c;以及vm账号注册的问题查看虚拟化支持是否开启vm的安装vm账号注册的常见问题VM 16的安装步骤查看虚拟化支持是否开启 可以从任务管理器中的性能去查看CPU是否开启虚拟化支持 vm的安装 访问 vm 的官网: https://www.vmware.co…

I2C_Adapter驱动框架讲解与编写

I2C_Adapter驱动框架讲解与编写 文章目录I2C_Adapter驱动框架讲解与编写参考资料&#xff1a;一、 回顾1.1 2C驱动程序的层次1.2 I2C总线-设备-驱动模型二、 I2C_Adapter驱动框架2.1 核心的结构体1. i2c_adapter2. i2c_algorithm2.2 驱动程序框架1. 所涉及的函数2. i2c_algorit…

lq-递归

1、递归实现指数型枚举从 1∼n 这 n个整数中随机选取任意多个&#xff0c;输出所有可能的选择方案。输入格式输入一个整数 n。输出格式每行输出一种方案。同一行内的数必须升序排列&#xff0c;相邻两个数用恰好 1个空格隔开。对于没有选任何数的方案&#xff0c;输出空行。本题…