性能测试二:BeanShell

一、BeanShell内置变量

1、beanshell可以执行标准JAVA语句和表达式,另外包括一些脚本命令和语法
2、支持beanshell的部分

  • 前置处理器:BeanShell PreProcesser
  • 采样器:BeanShell Sampler
  • 后置处理器:BeanShell PostProcesser
  • 断言:BeanShell断言

3、内置变量
取样器位置:
image.png
查看beanshell输出的位置:点击三角标image.png

  • log:写日志到控制台和jmeter.log,如log.info(“xxxxx”);

image.png

  • vars:操作jmeter变量
    • vars.get(“port”):从jmeter中获取${skuId}变量的值

image.png
image.png

  • vars.put(“name”,“test”):将"test"保存到${name}变量中

image.png

  • prev:获取前面sampler返回的信息
    • getResponseDataAsString():获取响应信息
    • getResponseCode():获取响应code

更多内置变量参考:https://jmeter.apache.org

二、BeanShell使用方法

添加beanshell脚本位置:添加→前置/后置处理器→beanshell preprocesspr/postprocessor
image.png

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;
}

效果
image.png

2.5 写数据至文件中

写在BeanShell后置处理器中,需要写入的响应数据,记得把每个数据都提取出来image.pngimage.pngimage.png

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();
}
    

猜你喜欢

转载自blog.csdn.net/TDLDDMZ/article/details/131032277
今日推荐