如果循环计数大于1,则Beanshell断言返回不一致的结果

时间:2018-08-20 20:36:35

标签: jmeter beanshell

我在HTTP请求中添加了一个beanshell断言,如果我使用循环计数值1运行脚本,通过在CSV文件中添加1值,该断言将返回正确的结果,但是如果我将循环计数更改为大于1示例:4,然后通过在CSV文件中添加4个值来运行脚本(第一个循环通过从csv文件中选择第一个值来运行测试,第二个循环选择第二个值,依此类推),我发现断言的结果不一致。 / p>

Ex:如果我通过将1st值移到第4行将3个以上的值添加到csv文件中运行测试,则断言将断言正确地显示为“未检查”,如果存在1个循环,则断言将显示第四行与第三行的值相同(尽管第四行的值应该与第三行的值不同)。

这是我正在使用的Beanshell断言:

String Response1 = prev.getResponseDataAsString();    
String Response2 = prev.getResponseDataAsString();    
String Response3 = prev.getResponseDataAsString();    
if(Response1.contains("${accInst}") && Response2.contains("${otherInst}") && Response3.contains("${accInstAvailableNotChecked}")){    
Failure=false;    
log.info("In Case ID: ${id}, Account Instructions Available is Not Checked");    
}    
else if(!Response1.contains("${accInst}") || !Response2.contains("${otherInst}") && Response3.contains("${accInstAvailableChecked}")){    
Failure=false;    
log.info("In Case ID: ${id}, Account Instructions Available is Checked");    
}    
else{    
Failure=true;    
FailureMessage="Account Instructions Available is not set correctly in the case.";    
log.error("Bean Shell Assertion is FAIL");    
}    

2 个答案:

答案 0 :(得分:0)

  1. 对于相同的输入数据,相同的代码将返回相同的结果。如果您得到不同的结果-很可能您正在提供不同的数据。使用Debug SamplerView Results Tree侦听器组合仔细检查所有4个JMeter变量值,很可能断言代码可以正常工作,您只是向它提供了错误的输入数据
  2. 检查您的断言scope,可能是由于Test Plan树中的错误放置而使断言的调用次数比您期望的多2倍
  3. 考虑使用vars的速记方式访问声明代码中的JMeter变量,即使用vars.get("accInst")而不是"${accInst}"
  4. Since JMeter 3.1 it is recommended to use JSR223 Test Elements and Groovy language用于任何形式的脚本,因此请考虑尽快迁移到JSR223 Assertion

答案 1 :(得分:0)

谢谢,迪米特里。实际上,我可以通过在正则表达式提取器中将“默认值”添加为“未找到”来解决此问题。另外,我看到了具有不同beanshell断言的相同问题,并且能够通过在Reg Expression Extractor的“ Default Value”字段中添加“ Not Found”来解决此问题。

有人可以解释在reg表达式提取器的“默认值”字段中添加“未找到”的用法。