我对Jmeter很新,已经花了很多时间才弄明白。 我想要实现的目标:
使用后处理器Regex Extractor我写了一个正则表达式,它返回了几个值(已在 www.regex101.com 中测试过它并且它按预期工作)。但是,当我在Jmeter中执行此操作时,我需要提供MatchNo。在这种情况下,只会给我一个特定的价值。我有点想到这个字段中的负数(匹配号)假设返回找到的所有值。当我使用Debug Sampler查找返回的值以及分配的变量时,我会看到很多不熟悉的东西。请参阅以下示例:
要解析正则表达式的文本:
some data here...
"PlanDescription":"DF4-LIB 4224-NNJ"
"PlanDescription":"45U-LIP 2423-NNJ"
"PlanDescription":"PMH-LIB 131-NNJ"
some data here...
正如我之前所说,在www.regex101.com上,我使用正则表达式进行了测试:
\"PlanDescription\":\"([^\"]*)\"
我所需要的所有信息都是正确的(使用第1组)。
DF4-LIB 4224-NNJ
45U-LIP 2423-NNJ
PMH-LIB 131-NNJ
在MatchNo处使用负数(我试过-1,-2,-3 - 相同的结果)。调试采样器中的Jmeter Regex Extractor字段(参考名称为计划)中的字段我看到以下内容:
Plans=
Plans_1=DF4-LIB 4224-NNJ
Plans_1_g=1
Plans_1_g0="PlanDescription":"DF4-LIB 4224-NNJ"
Plans_1_g1=DF4-LIB 4224-NNJ
Plans_2=45U-LIP 2423-NNJ
Plans_2_g=1
Plans_2_g0="PlanDescription":"45U-LIP 2423-NNJ"
Plans_2_g1=45U-LIP 2423-NNJ
Plans_3=PMH-LIB 131-NNJ
Plans_3_g=1
Plans_3_g0="PlanDescription":"PMH-LIB 131-NNJ"
Plans_3_g1=PMH-LIB 131-NNJ
我只需要在这种特殊情况下 - Jmeter正则表达式返回包含以下内容的3个值:
DF4-LIB 4224-NNJ
45U-LIP 2423-NNJ
PMH-LIB 131-NNJ
没有别的。如果有任何人在任何帮助之前遇到这个问题将不胜感激。
答案 0 :(得分:1)
根据Debug Sampler的输出,没有问题,它只是RegEx如何返回响应:
Plans_1,Plans_2,Plans_3
是您想要的实际变量集。 Plans_matchNr
,其中应包含匹配数(在您的示例中为3)。如果你循环它们(你将从1循环到这个变量的值)_g
个变量集指的是每个匹配实例匹配 g roups(在您的情况下为3)。如果你不关心它们,请忽略它们。它们总是发布,但没有任何损害。一旦变量发布,您可以做很多事情:
${Plans_1}
,${Plans_2}
,${Plans_3}
等(如上所述注释)。 Plans_...
变量:将循环中的下一个变量称为${__V(Plans_${i})}
,其中i
是一个值介于1和Plans_matchNr
之间的计数器您还可以使用以下简单的BeanShell后处理器或BeanShell Sampler脚本将它们连接成1个变量:
int count = 0;
String allPlans = "";
// Get number of variables
try {
count = Integer.parseInt(vars.get("Plans_matchNr"));
} catch(NumberFormatException e) {}
// Concatenate them (using space). This could be optimized using StringBuffer of course
for(int i = 1; i <= count; i++) {
allPlans += vars.get("Plans_" + i) + " ";
}
// Save concatenated string into new variable
vars.put("AllPlans", allPlans);
因此,您将获得所有旧变量,加上:
AllPlans=DF4-LIB 4224-NNJ 45U-LIP 2423-NNJ PMH-LIB 131-NNJ