我想检查一个http请求的响应属性是否也在另一个http请求中退出。我怎样才能做到这一点?

时间:2017-03-03 12:28:42

标签: jmeter

HTTP请求  ..正则表达式来获取一个标记“PostID”

enter image description here

HTTP请求  ..Beanshell断言验证响应中是否存在$ {PostID}

enter image description here

我正在使用while控制器循环请求,直到找到PostID

条件为$ {__ javaScript(“$ {count}”!= 1)}

虽然我在“FetchSentPost”请求的响应中看到PostID

,但Beanshell断言失败了

enter image description here

我需要while循环在HTTP请求“FetchSentPost”中第一次遇到Post ID时结束

我哪里错了?

3 个答案:

答案 0 :(得分:0)

脚本中出现了一些错误。

  1. 条件必须更改为${__javaScript(${count} != 1)}。没有双引号。
  2. 在BeanShell断言中,您必须使用vars.put分配计数值,而不是count += 1,而不是vars.put("count", 1);
  3. 正如德米特里所说,其他错误是:

    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 AssertionGroovy语言,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的帮助