JMETER - 尝试使用beanshell

时间:2018-01-26 19:10:47

标签: csv jmeter beanshell

我正在尝试使用beanshell断言执行测试。我有一个带有预期金额的csv文件,这些金额都是2位小数,例如145.16,1945.21等,我希望将它们与我的采样器http响应以相同格式返回的实际值进行比较。如果两者之间的区别是<我希望我的测试用例通过。 0.1即10美分/便士等

我开始将初始字符串值解析为双精度或浮点数或短路并使用Math.abs进行比较,但当然准确度并不存在,例如,如果差异实际上是10美分(FAIL),那么计算实际上就是说0.999999765或类似的测试用例会错误地通过。

我现在已经转移到BigDecimal但收效甚微。我试图使用setScale,这使得比较更准确。

所以我的问题是BigDecimal要走的路?我创建它后如何处理BigDecimal - 如果我将它转换为short或float等我再次遇到同样的问题。 DecimalFormat会有帮助吗?我需要在我使用Math.abs的位置使用两个小数点的值 - 是否有Math.abs的替代?

希望有意义并提前感谢。

2 个答案:

答案 0 :(得分:0)

  1. BigDecimal非常适合使用,至少所有设计用于货币对象的Java解决方案都在使用BigDecimal。您可能会发现ROUND_HALF_EVEN属性有用
  2. 请注意,Joda-Money库提供了Money.isGreaterThan()方法,可以使用该方法代替自定义逻辑。
  3. JMeter 3.1 it is recommended to use JSR223 Test Elements and Groovy language for any form of scripting开始,请考虑尽快切换到Groovy。

答案 1 :(得分:0)

FYI最终这对我有用 -

import java.math.BigDecimal;

BigDecimal Actual_PAF = new BigDecimal("${Actual_PAF}");
BigDecimal Expected_PAF = new BigDecimal("${Expected_PAF}");

BigDecimal ActualPAFDifference = new 
BigDecimal(Actual_PAF.subtract(Expected_PAF).toString());

if (ActualPAFDifference.abs() < 0.001)

{ Failure=false;
  vars.put("PAFPassOrFail","PASS");}

else 
{ Failure=true;
vars.put("PAFPassOrFail","FAIL");
}