HTTP请求 ..正则表达式来获取一个标记“PostID”
HTTP请求 ..Beanshell断言验证响应中是否存在$ {PostID}
我正在使用while控制器循环请求,直到找到PostID
条件为$ {__ javaScript(“$ {count}”!= 1)}
虽然我在“FetchSentPost”请求的响应中看到PostID
,但Beanshell断言失败了我需要while循环在HTTP请求“FetchSentPost”中第一次遇到Post ID时结束
我哪里错了?
答案 0 :(得分:0)
脚本中出现了一些错误。
${__javaScript(${count} != 1)}
。没有双引号。count += 1
,而不是vars.put("count", 1);
正如德米特里所说,其他错误是:
String ID = vars.get("PostID");
与contains
vs regex matching
相关,请在进行上述更改后尝试两者。我试过contains
,它正在运作。
使用contains
:
while(!str.contains(ID)){
vars.put("count", 1);
}
答案 1 :(得分:0)
您的Beanshell脚本中存在语法错误:
String ID = vars.get(PostID);
^^^^^^
应该是
String ID = vars.get("PostID");
继续前进,您可以将debug();指令添加到JMeter脚本的开头以进行故障排除。我还建议切换到JSR223 Assertion和Groovy语言,Groovy执行得更好,更符合Java。
答案 2 :(得分:-1)
创建了一个用户定义的变量' PostIdFound'有价值的'错误'在while循环之外。
将while条件更改为$ {__ javaScript($ {PostIdFound}!= true)}
然后按如下所示更改了BeanShell脚本
import java.util.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
String ID = vars.get("PostID");
String str= SampleResult.getResponseDataAsString();
vars.get("PostIdFound");
if(str.contains(ID)){
vars.put("PostIdFound","true");
}
问题已解决。谢谢@Dmitri T和@Naveen的帮助