提问者:小点点

无法在BeanShell帖子处理器中使用RegEx从位置URL读取值


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

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

我能够读取响应标头的值作为 http://www.google.com/state=asdas123123123123

然后,我添加了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;
} 

此代码不起作用。似乎双斜杠正在产生问题。


共1个答案

匿名用户

>

  • 从JMeter 3.1开始,你应该使用JDR223测试元素和Groovy语言进行脚本编写

    Groovy提供了类似于=~的查找运算符

    假设以上两点,您可以将“代码”重构为以下一行:

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

    演示:

    更多信息:

    • Groovy中字符串中的模式匹配
    • Apache Groovy-为什么以及如何使用它