Jmeter模块详解(11)BeanShell的常用功能

目录

BeanShell 预处理程序BeanShell PreProcessor

获取时间戳__time

摘要算法处理__digest

MD5哈希处理

Base64编码处理

toUpperCase()大写处理

BeanShell后置处理程序BeanShell PostProcessor

跨线程组全局变量__setProperty()

跨线程组获取变量props.get()

变量处理vars

转换为字符串.toString()

信息输出System.out.println()

文件处理File

文件写入FileWriter

文件缓存输出流BufferedWriter


 

BeanShell是Jmeter的一个脚本编辑器,可对变量等数据进行脚本化处理的容器,需要从别的元件获取入参,并做出参操作给元件调用。语句结尾需加“;”。注释和取消注释快捷键:CTRL+/

 

BeanShell 预处理程序BeanShell PreProcessor

用于发送请求前对数据做预处理

 

获取时间戳__time

${__time}获取13位毫秒时间戳

${__time(/1000,)}:获取10位时间戳

${__time(yyyy-MM-dd,)}:生成当前日期,精确到天时间戳

${__time(YMDHMS,)}:生成当前日期,精确到秒时间戳

 

摘要算法处理__digest

${__digest(SHA-256,${timestamp},${token},${nonce},${timestamp})}:sha256摘要处理

 

MD5哈希处理

需要下载custom Jmeter functions插件或者导入jar包,之后可以import或者使用函数助手

方法一.函数助手:

1)使用 ${__MD5(w12345678,)} 进行MD5加密(32位小写)

2)使用${__uppercase(,)} 转大写,最终为:${__uppercase(${__MD5(w12345678,)},)}

方法二.Beanshell:

import org.apache.commons.codec.digest.DigestUtils;

String str = "w12345678";

String sign = DigestUtils.md5Hex(str); 

vars.put("pw",sign.toUpperCase());

 

Base64编码处理

需要下载custom Jmeter functions插件或者导入jar包,之后可以import或者使用函数助手

方法一.Beanshell:

import sun.misc.BASE64Decoder;

String str = "w12345678";

String data = new sun.misc.BASE64Encoder().encode(str.getBytes());

vars.put("Auth",data);

 

toUpperCase()大写处理

String SIGN = sign.toUpperCase()

 

 

BeanShell后置处理程序BeanShell PostProcessor

用于处理响应数据

添加BeanShell后置处理器:

 

跨线程组全局变量__setProperty()

如果要跨线程组共享参数,比如登录返回的token值,就需要该函数

上图中,${gettoken}为登录返回的token值(参考正则提取器目录),setProperty函数将${gettoken}的值赋给变量token并设为全局变量(即属性)

 

在线程组二引用全局变量token,格式${__property(变量名)}或者${__P(变量名)} :

线程组二调用到了token值:

 

跨线程组获取变量props.get()

A线程组定义全局变量:${__setProperty(token,${gettoken},)};

B线程组获取全局变量:t = props.get(“token”)

 

变量处理vars

不可跨线程组,可处理String和Object类型数据

 

处理String数据:

key2 = vars.get("key"):获取Jmeter元件中的key的值并赋给key2(key2无法给取样器调用)

vars.put(“key3”,Value):保存value的值到Jmeter元件中的变量key3(key3能给取样器调用)

 

处理Object数据:

vars.getObject("ID").get(0).get("RECID"):取ID对象的RECID列的第一行数据

vars.putObject("OBJECT_NAME", Object):保存对象值到OBJECT_NAME (包括 List、Map、Closure 之类)

 

转换为字符串.toString()

可将其他类型数据转换为字符串:变量名.toString()

vars.put("ChnlDocId",ChnlDoc.toString()):该语句中ChnlDoc为对象变量

 

信息输出System.out.println()

输出指定字符内容,需要双引号:

System.out.println("嘻嘻");

 

输出变量gettoken的值,不能直接System.out.println(gettoken):

tokenvalue = vars.get("gettoken");

System.out.println(tokenvalue);

 

在启动CMD窗口可以看到输出信息:

 

文件处理File

如下删除指定文件:

String filename = "D:/JSESSIONID.txt";

File file = new File(filename);//创建file对象

if(file.exists()){file.delete();}//exists方法判断是否存在,delete删除

 

文件写入FileWriter

如下将cookie和Timestamp参数写入本地文件:

FileWriter out = new FileWriter("D:/JSESSIONID.txt",true);//FileWriter类创建对象out来创建文件

out.write("${cookie}");//out调用write方法写入数据到JSESSIONID.txt文件

out.write(",");

out.write("${Timestamp}");

out.write(System.getProperty("line.separator"));//设置跨行

out.close();//关闭

 

如图为生成的文件:

 

文件缓存输出流BufferedWriter

BufferedWriter需要依赖FileWriter但是多次写入文件的速度更快

 

如下将cookie和Timestamp参数写入本地文件:

FileWriter fstream = new FileWriter("D:/JSESSIONID.txt",true);//FileWriter类创建对象fstream来创建文件

BufferedWriter out = new BufferedWriter(fstream);//BufferedWriter类创建对象out

out.write("${cookie}");//out调用write方法写入数据到JSESSIONID.txt文件

out.write(",");

out.write("${Timestamp}");

out.write(System.getProperty("line.separator"));//设置跨行

out.close();

fstream.close();//关闭

 

同样生成如下文件:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值