自学内容网 自学内容网

jmeter-beanshell学习5-beanshell加减乘除运算

我用到的场景是计算金额,所以主要以金额为主,感觉这部分有点麻烦,直接写遇到的几个坑,就不演示解决的过程了。

1.最早写了个两数相减,但是小数精度容易出现问题。比如1-0.01=0.989999997这种情况,随便写的几个数字,不要认真。这种情况用BigDecimal处理。

2.计算出来的金额精度问题解决了,我自己上送的金额精度也要处理,不然计算出的金额是1.00,我上送的是1,因为是字符串对比,导致对比时候出现1不等于1.00的情况,出现报错。

3.jmeter返回报文,如果金额过大,会出现科学计数法的情况,比如返回金额1.23456789013E9这样。还需要转化成正常的数字格式。

暂时这三个坑,下面写具体方案。场景:动账前查一下余额,动账后查一下余额,两个余额相减,验证差值是不是我的交易金额。查余额应该是连接数据库的,我这里就不连了,还是用用户参数代替,点击了解jmeter连mysql数据库,动账前余额是1,动账后余额是0.99

import java.math.BigDecimal;
import java.math.RoundingMode;

//动账前余额
before=vars.get("BAL_1");
//动账后余额
after=vars.get("BAL_2");

BigDecimal before=new BigDecimal(before);
BigDecimal after=new BigDecimal(after);

//两数相减,计算动账前后余额变化
BigDecimal fee_new= before.subtract(after);
//保留两位小数
BigDecimal fee_new=fee_new.setScale(2,RoundingMode.HALF_UP);
//转化为字符串
String fee_new1=fee_new.toString();

log.info("动账前后差值:"+fee_new1);

差值算出来,再获取交易金额,加上断言,进行判断就可以了。

上面是做的减法。把加减乘除都写一个

import java.math.BigDecimal;

BigDecimal a=new BigDecimal("6");
BigDecimal b=new BigDecimal("2");
BigDecimal c=a.add(b);
String c1=c.toString();
log.info("a+b="+c1);

BigDecimal c=a.subtract(b);
String c1=c.toString();
log.info("a-b="+c1);

BigDecimal c=a.multiply(b);
String c1=c.toString();
log.info("a*b="+c1);

BigDecimal c=a.divide(b);
String c1=c.toString();
log.info("a/b="+c1);


写的匆忙,忘了加科学计数法转化,如果返回结果是科学计数法的情况,一般要转化

直接用正则表达式把bal_ar取出来,然后处理

bal_ar=vars.get("bal_ar");
BigDecimal bal_ar1=new BigDecimal(bal_ar);
BigDecimal bal_ar1=bal_ar1.setScale(2,RoundingMode.HALF_UP);
String bal_ar2=bal_ar1.toPlainString();
log.info("科学计数法转化以后:"+bal_ar2);

String bal_ar2=bal_ar1.toPlainString();这一行就是把科学计数法转成正常数值


原文地址:https://blog.csdn.net/zhu940923/article/details/140253589

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!