一、BeanShell内置变量
1、beanshell可以执行标准JAVA语句和表达式,另外包括一些脚本命令和语法
2、支持beanshell的部分
- 前置处理器:BeanShell PreProcesser
- 采样器:BeanShell Sampler
- 后置处理器:BeanShell PostProcesser
- 断言:BeanShell断言
3、内置变量:
取样器位置:
查看beanshell输出的位置:点击三角标
- log:写日志到控制台和jmeter.log,如log.info(“xxxxx”);
- vars:操作jmeter变量
- vars.get(“port”):从jmeter中获取${skuId}变量的值
- vars.put(“name”,“test”):将"test"保存到${name}变量中
- prev:获取前面sampler返回的信息
- getResponseDataAsString():获取响应信息
- getResponseCode():获取响应code
更多内置变量参考:https://jmeter.apache.org
二、BeanShell使用方法
添加beanshell脚本位置:添加→前置/后置处理器→beanshell preprocesspr/postprocessor
2.1 方法一:直接在JMeter中编写
缺点:JMeter中无法debug、无报错,有bug时不易进行定位
1、调用接口获取库存信息
2、判断库存,如果库存大于500,调用buy接口购买10个商品,否则购买5个商品 // 获取接口返回的库存值
String myStock = vars.get(“p_stock”);
// 转换为整数
int iStock = Integer.parseInt(myStock);
// 判断库存
2.2 方法二:引入外部JAVA源文件
// 引入源文件
source("D:/test.java")
String num = "${__Random(10,600,)}" # num变量不可再除当前beanshell的任何文件下使用
// 生成随机手机号
String num2 = "135${__Random(10000000,99999999,myPhone)}";
String code = "wheat";
// 生成时间戳
String time = "${__time(,myTime)}";
// 调用外部函数进行加密
String md5 = Md5Util.getMd5Hex(phone+code+time); // 将数据另存为新的变量
//把数据存下来,就可在jmeter中的脚本中调用啦~
vars.put("num2",num2);
vars.put("md5",md5);
2.3 方法三:引用外部jar包
与方法二最大的区别就是引入方式的不同,jar包是用import 引入
反编译工具 jd-gui
2.4 断言
Failure:是否失败,Boolean类型
FailureMessage:失败日志,在断言失败时显示
int num = Integer.parseInt(var.get("nums"));
if (num > 50 ){
Failure = true;
FailureMessage = "库存低于50"; // 使用FailureMessage可自定义失败信息
log.info(new String(ResponseData));// ResponseData是写死的失败信息
log.info(SamplerData); // 打印请求数据
}else{
Failure = false;
}
效果
2.5 写数据至文件中
写在BeanShell后置处理器中,需要写入的响应数据,记得把每个数据都提取出来
String line = vars.get("name")+","+vars.get("token");
try{
BufferedWriter writer = new BufferedWriter(new FileWriter("文件绝对路径",true));
writer.write(line);
writer.newLine();
writer.close();
} catch(IOException e){
e.printStackTrace();
}