【问题标题】:Jmeter: Typed variable declaration : Method Invocation Double.parseDoubleJmeter:类型变量声明:方法调用 Double.parseDouble
【发布时间】:2024-01-15 01:20:02
【问题描述】:

嘿,我正在为 jmeter 中的 API 测试编写一些 beanshell 脚本。我已经用 beanshell 编写了很多 jmeter 脚本,并且在使用 Integer.parseInt() 方法调用时工作正常,但是我有一个带小数位的值,其中我的 SQL 返回值 20.00000 并且我的 Json 路径提取器得到 20.0 所以我的测试失败比较的时候。由于这个问题,我决定将此值作为双变量而不是字符串进行比较,但是在 BeanShell 上使用 Double.parseDouble 时出现以下错误。

2016/08/17 12:48:45 错误 - jmeter.util.BeanShellInterpreter:调用 bsh 方法时出错:eval 源文件:内联评估:print("Width Assertion..."); int Total_Printers_SQL = Integer.parseInt(vars.get . . . '':类型变量声明:方法调用 Double.parseDouble

2016/08/17 12:48:45 警告 - jmeter.assertions.BeanShellAssertion:org.apache.jorphan.util.JMeterException:调用 bsh 方法时出错:eval 源文件:内联评估:print("Width Assertion..."); int Total_Printers_SQL = Integer.parseInt(vars.get . . . '':类型变量声明:方法调用 Double.parseDouble

即使显示错误,双变量的值也会打印在 Jmeter 提示符上,如下所示。

如果有人是 beanshell 专家并且可以帮助我识别错误,那就太好了。谢谢!

【问题讨论】:

  • 试试Double.parseDouble(vars.get("Printer_Width_SQL_" + i).toString())...它可能需要“被告知”它是一个字符串。

标签: jmeter beanshell jsonpath


【解决方案1】:

如果你得到的号码不是有效的Double(例如1.2s,或者只是null),你会得到这样的异常。解决方法是检查值is double by RegEx,或者简单地检查trying to parse, and catching exception(请注意,Beanhell 没有正确传递异常,因此您必须检查任何异常,因此最好将其限制在这一行):

double x = 0.0; // default value
String value = vars.get("myVar");
try
{
    x = Double.parseDouble(value);
}
catch(Exception e)
{
    log.info("Cannot parse " + value + " as double");
}

【讨论】: