无法使用 BeanShell Post 处理器中的 RegEx 从位置 URL 读取值

Unable to read value from location URL using RegEx inside BeanShell Post Processor

我正在使用 JMeter 来自动化性能测试用例。 HTTP 请求后,我使用 RegEx Post 提取器读取响应 header。此回复headerreturn位置。位置是 project-specific URL。我想从这个 URL 中读取状态变量的值。为此,我使用了 BeanShell PostProcessor。例如,

location: "http://www.google.com/state=asdas123123123123&query=asdasdas!@#"

我能够使用正则表达式提取器

将响应 header 的值读取为 http://www.google.com/state=asdas123123123123&query=asdasdas!@#"

然后,我添加了 BeanShell Post处理器来读取状态和查询。

import java.util.regex.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

try{
//location = "http://www.google.com/state=asdas123123123123&query=asdasdas!@#"
String location = vars.get("location");
String pStr = "/state=(\S+?)&/"";
Pattern patternN = Pattern.compile(pStr);

Matcher matcher = patternN.matcher(pStr);

    if (matcher.find()) {
        vars.put("variablename_1",matcher.group(0));
    }

    
vars.put("variablename_2",location);
}catch (Exception ex) {
        vars.put("variablename_ex",ex);
    throw ex;
} 

此代码无效。似乎双斜杠造成了问题。

  1. Since JMeter 3.1 you should be using JDR223 Test Elements and Groovy language 用于脚本

  2. Groovy 提供 Find operator 看起来像 =~

  3. 假设以上 2 点你可以重构你的“代码”到这个单行:

    vars.put('variablename_1', (vars.get('location') =~ /state=(\w+)&/)[0][1])
    

演示:

更多信息: