JMeter BeanShell在实际测试中的应用

一、BeanShell常用场景

BeanShell最常用的场景:

  • 设置随机数
  • 数据加密
  • 响应报文数据提取
  • 数据库数据提取
  • 复杂逻辑结果断言
  • ......

二、source语法

BeanShell除了可以import外部jar包外,还有一个十分好用的特性,就是可以可以引用外部BeanShell脚本。

// aa/bb/cc/scriptA.bsh
void printInfo(){
    log.info("i am scriptA");
}


// scriptB.bsh
source("aa/bb/cc/scriptA.bsh");
printInfo();

 利用source语法可以很好的组织BeanShell脚本。

三、随机数和数据加密

一般复杂有规则的随机数和数据加密在BeanShell PreProcessor中生成,生成后放入vars里即可。

// BeanShell PreProcessor脚本
String randomValue = "随机数生产";
String DataEncrypt = "数据加密";

vars.put("randomValue", randomValue);
vars.put("DataEncrypt", DataEncrypt);


// sampler请求报文中引用
${randomValue}
${DataEncrypt}

四、数据库数据提取

JMeter的JDBC Request组件提供了多种提取数据的方式,这里我只介绍我认为比较直观提取数据的方法。

假设有一张USERS表,字段有ID、USER_NO、USER_NAME、CERTIFICATE_TYPE、CERTIFICATE_NO等,现在需要根据USER_NAME提取USER_NO的值。

首先我们添加JDBC Request组件,

注意,Result variable name必须填写,为结果集添加一个变量名,其类型是一个list,list里每个成员其实是一个map。

随后在JDBC Request组件下添加BeanShell PostProcessor组件,编写数据提取脚本。

// BeanShell PostProcessor

String userNo = String.valueOf(vars.getObject("USERS").get(0).get("USER_NO"));

vars.put("userNo", userNo);

脚本中,get(0)代表结果集的第一行数据。

五、结果断言

有时候,JMeter提供的Assertion组件并不能满足我们的要求,这时就需要用到BeanShell  Assertion来自定义一些断言逻辑。

...
...
自定义的断言逻辑
...
...

if(断言不通过) {
    // 设置当前sampler的结果为测试失败
    Failure = true;
    // 设置失败信息
    FailureMessage = "测试失败";
    // 停止当前线程继续执行
    Response.setStopThread(true);
}

六、脚本调试技巧

在JMeter上使用过BeanShell的朋友应该都有这样的体会,报错时完全不知道哪里出错了,那种报错信息完全让人摸不着头脑,这时我们可以把脚本内容加上try...catch块,提示的error会更加明确,但并不总有效果的,我总结了一些常见的出错类型:

  • 语法错误
  • 类型赋值错误
  • 使用了java的高版本语法特性但BeanShell不支持
try {
	// script
}catch (Throwable ex) {
	log.error("", ex);
}

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值