beanshell脚本,beanshell脚本语法入门
MeterSphere接口测试中使用beanshell脚本进行参数哈希sha1加密
需求是这样的,token是从第三步接口进行产生的。通过脚本
import org.apache.commons.codec.digest.DigestUtils;
//导入org.apache.commons.codec.digest.DigestUtils包;
String sign = DigestUtils.sha1Hex ("${__time}${token}xxxxx").toUpperCase( );
//定义sign=服务器时间+token+固定密码xxxxx;然后.toUpperCase( )大写传出;
vars.put("sign", sign);?
//导出签名以第四条接口使用;
第4条case直接使用${sign}就可以使用上一步的sign进行加密

MeterSphere接口测试中使用beanshell脚本进行md5加密
import org.apache.commons.codec.digest.DigestUtils;
//导入org.apache.commons.codec.digest.DigestUtils;
String timeStamp = "${__time(/1000,)}";
//定义时间timeStamp=服务器时间;
String randomStr = "${__Random(11111111,99999999)}";
//定义时间随机数=8位1-9的随机数;
String tmp = timeStamp + randomStr + "xxxxx";
//定义tmp=时间timeStamp,8位随机数和密码xxxxx;
log.info("timeStamp:" + timeStamp);
//打印timeStamp;
log.info("randomStr:" + randomStr);
//打印randomStr;
log.info("tmp:" + tmp);
//打印tmp;
//String un = DigestUtils.sha1Hex(tmp);
//定义un=哈希sha1加密的tmp;
//log.info("un:" + un);
//打印un;
String signature = DigestUtils.md5Hex (DigestUtils.sha1Hex(tmp)).toUpperCase();
//定义signature==哈希sha1加密的tmp然后再进行md5加密后进行大写;
log.info("signature:" + signature);
//打印signature;
vars.put("signature", signature);
//打印signature;
vars.put("timeStamp", timeStamp);
//打印timeStamp;
vars.put("randomStr", randomStr);
//打印randomStr;
beanshell中break的使用(break不再只是结束循环!)
使用jmeter如果单纯的用什么响应断言那就没意思了,并不能起到接口测试的目的,因为实在是没啥意义……
所以会用到beanshell来解析接口返回的json,针对json中的某些值进行具体的断言
使用beanshell时就会遇到问题!
用了就会知道,那个Failure=true或false就是断言的结果,但是!当你的beanshell脚本写一堆,不只一处Failure时,就会发现最后的结果并不是自己想要的。尤其是在循环里,该怎么用??
多次尝试和探索,终于知道了break的妙用
首先说一下Failure这个玩楞在jmeter中的作用:Failure就是一个普通的beanloon变量,当beanshell脚本执行完后(注意:是执行完后!),jmeter会去判断Failure的值,是true的话就是断言失败,也就是接口有问题
那么~问题来了,脚本写的多的时候,本来前边Failure是true了,但是后边的继续执行,又把Failure置为了false。导致最后结果并没有报错,而是接口执行成功,如下这样
在java编写时,break一般是用在循环或switch里的,如果这样写在if里是报错的……
居然!!!jmeter中可以这样用!
在Failure断言后加break,来结束脚本的执行
当然,这样一旦断言失败,就结束脚本,后边的也就不执行了……
没关系啊,断言失败就说明接口有问题,后边的可以不执行。也比断言有问题最后还显示成功好吧,哈哈。不过这也是jmeter不完善的地方
break可以结束脚本,那beanshell脚本的for循环或者switch中的break还是结束循环的作用吗?
yes,他们的break依旧生效
如图,既有多个for循环,又有switch,如果if里的break执行,则脚本结束,case的break执行,继续下一个循环,不会结束switch