性能测试二:BeanShell

文章介绍了BeanShell在JMeter中的作用,包括作为前置处理器、后置处理器和断言的使用。它提供了内置变量如log、vars和prev,用于日志记录、操作JMeter变量和获取样本响应信息。文章还详细讲解了如何直接在JMeter中编写脚本、引入外部JAVA源文件以及引用jar包的方法,并提到了断言的实现和将数据写入文件的操作。
摘要由CSDN通过智能技术生成

一、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();
}
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值