我正在使用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;
}
此代码不起作用。似乎双斜杠正在产生问题。
>
从JMeter 3.1开始,你应该使用JDR223测试元素和Groovy语言进行脚本编写
Groovy提供了类似于=~
的查找运算符
假设以上两点,您可以将“代码”重构为以下一行:
vars.put('variablename_1', (vars.get('location') =~ /state=(\w+)&/)[0][1])
演示:
更多信息: