Jmeter正则表达式提取器。如何将所有返回值保存到单个变量?

时间:2016-12-16 16:54:12

标签: regex jmeter

我对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

没有别的。如果有任何人在任何帮助之前遇到这个问题将不胜感激。

1 个答案:

答案 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