【问题标题】:Unable to read value from location URL using RegEx inside BeanShell Post Processor无法使用 BeanShell 后处理器中的 RegEx 从位置 URL 读取值
【发布时间】:2021-05-21 23:18:29
【问题描述】:

我正在使用 JMeter 来自动化性能测试用例。在 HTTP 请求之后,我使用 RegEx Post Extractor 来读取响应标头。这个响应头返回位置。位置是项目特定的 URL。我想从此 URL 读取状态变量的值。为此,我使用了 BeanShell PostProcessor。例如,

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

我可以使用正则表达式提取器将响应标头的值读取为http://www.google.com/state=asdas123123123123&query=asdasdas!@#"

然后,我添加了 BeanShell PostProcesssor 来读取状态和查询。

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;
} 

此代码不起作用。似乎双斜线造成了问题。

【问题讨论】:

  • String pStr = "/state=(\\S+?)&/"";替换为String pStr = "state=([^\\s&]+)";,然后使用vars.put("variablename_1",matcher.group(1));

标签: regex jmeter beanshell


【解决方案1】:
  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])
    

演示:

更多信息:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多