JMeter断言:比较变量时出错

时间:2019-02-13 07:19:07

标签: groovy jmeter compare jmeter-5.0

我正在尝试使用从数据库中获取的值来声明我的API响应数据。

除非我将toString()添加到两个变量中,否则我的代码无法比较我的变量。有什么解决办法吗?还是toString()是强制性的?

有问题的代码是:

Boolean comparision = false;
for (int i; i < vars.getObject("dbData").size(); i++) {    
if (vars.getObject("dbData").get(i).get("DbData").toString().equals(${codeid_API}.toString()))
{
    comparision = true;            
}     
} 

${codeid_API}是我存储API响应数据的变量。 (vars.getObject("dbData").get(i).get("DbData")从我的数据库获取值。

2 个答案:

答案 0 :(得分:2)

您可以改用 Objects.equals

ServiceReference1.ServiceClient client2 = new ServiceReference1.ServiceClient();
try
{
    var res = client2.SayHelloAsync();
    Console.WriteLine(res.Result);

}
catch (Exception)
{
    throw;
}
  

如果参数彼此相等,则返回true,否则返回false。

对于整数,您可以使用Objects.equals(vars.getObject("dbData").get(i).get("DbData"), ${codeid_API}); ==进行比较

as int

答案 1 :(得分:1)

不要将${codeid_API}形式的JMeter变量内嵌到Groovy脚本中,如果启用了已编译的脚本缓存,则将仅解析一次,这可能会破坏脚本逻辑。

考虑将其替换为vars.get('codeid_API),其中varsJMeterVariables类实例的简写

JSR223 Sampler文档中引用:

  

JMeter在将脚本字段传递给解释器之前先处理函数和变量引用,因此这些引用将只解析一次。脚本文件中的变量和函数引用将逐字传递给解释器,这可能会导致语法错误。为了使用运行时变量,请使用适当的props方法,例如

props.get("START.HMS");

props.put("PROP1","1234");

更多信息:Debugging JDBC Sampler Results in JMeter