我有两个值关联,我能够成功地在两个参数中捕获它们。我在匹配号码中使用-1
获取随机值,但我实际上想要的方式是,假设我的第一个值随机将匹配号码设为7
并且我想要我的第二个值也应该与7相同的匹配数。
请帮助我如何模拟这个。
答案 0 :(得分:1)
不幸的是,(正如您所发现的),JMeter独立地确定了“随机”。您需要做的是捕获var1和var2的每个潜在值(使用-1
)。然后在你的正则表达式之后,添加一个Beanshell Postprocessor
得到一个随机数n,然后选择第n个var1和var2:
String random_number = Integer(random.nextInt(vars.get("var1_name_matchNr"))).toString;
vars.put("var1_name_chosen",vars.get("var1_name_" + random_number));
vars.put("var2_name_chosen",vars.get("var2_name_" + random_number));
答案 1 :(得分:0)
如果我理解正确,您需要提取随机正则表达式值,并将其放入2个变量中。如果是这样,我会建议做一些像......
获得随机正则表达式值后,添加beanshell,在其中将使用regex获得的值粘贴到第二个变量中。
因此,如果regex中的变量是“foo1”,只需添加beanshell sampler:
vars.put("foo2", vars.get("foo1"));
编辑:
这样可以更好地作为Java采样器,但我认为它也适用于BeanShell采样器。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.threads.JMeterContextService;
import java.util.ArrayList;
import java.util.Random;
String previousResponse = JMeterContextService.getContext()
.getPreviousResult().getResponseDataAsString();
String locationLinkRegex = "\"locationId\": (.+?),";
String myLocationId = RegexMethod(previousResponse, locationLinkRegex,
true);
String myLocationLink = RegexMethod(
previousResponse,
"\"locationId\": ".concat(myLocationId).concat(
", \"locationLink\":(.+?))\""), false);
JMeterContextService.getContext().getVariables()
.put("locationId", myLocationId);
JMeterContextService.getContext().getVariables()
.put("locationLink", myLocationLink);
private static String RegexMethod(String response, String regex,
Boolean random) {
Random ran = new Random();
String result = "No matcher!";
ArrayList<String> allMatches = new ArrayList<String>();
allMatches = null;
if (random) {
Matcher m = Pattern.compile(regex, Pattern.UNICODE_CASE).matcher(
response);
while (m.find()) {
allMatches.add(m.group());
}
result = allMatches.get(ran.nextInt(allMatches.size()));
} else {
Matcher m = Pattern.compile(regex, Pattern.UNICODE_CASE).matcher(
response);
m.find();
result = m.group(1);
}
return result;
}
还需要实现异常处理......
EDIT2:
Regex方法是递归的(将这两个值都返回CSV,只有当locationId是唯一的时才可以使用):
private static String RegexMethod(String response, String regex) {
Random ran = new Random();
String result = "No matcher!";
List<String> allMatches = new ArrayList<String>();
// Find LocationId:
Matcher m1 = Pattern.compile(regex, Pattern.UNICODE_CASE).matcher(
response);
while (m1.find()) {
allMatches.add(m1.group());
}
result = allMatches.get(ran.nextInt(allMatches.size())).concat(",");
// Find LocationLink and return the CSV string:
return result += RegexMethod(response, "\"locationId\": "
.concat(result.substring(result.length()-1)).concat(", \"locationLink\":(.+?))\""));
}