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