输出计数变化时在正则表达式提取器中处理多个值

时间:2019-06-28 19:34:51

标签: jmeter

我在jmeter中使用正则表达式提取器来捕获将在下一个http请求中传递的值。

捕获的值是myModelProperty 'predict' not found on object of type 'Predictor *'等。 被捕获的请求总数各不相同。即,正则表达式提取器的输出的总计数是变化的。

在http请求中,基于计数值_matchnbr,我需要为每次迭代在http请求中循环并分配不同的请求(UPDATE `wp_postmeta` SET `meta_value` = replace(meta_value, 'old_value', 'new_value') WHERE `meta_key` LIKE 'your_key' request_1等)。此http请求也将在单独的线程组中。

  1. 请帮助创建正确的代码来处理此循环逻辑。我不希望使用for循环控制器,因为在非GUI模式下运行时遇到堆栈溢出错误。

  2. 请告知如何使正则表达式提取器的输出可用于单独线程组中的http请求。

1 个答案:

答案 0 :(得分:0)

要将正则表达式提取器的输出从一个Thread Group传递到另一个,您需要:

  1. 在第一个线程组中将相关的JMeter变量转换为JMeter属性。您可以通过在第一个线程组的末尾添加一个JSR223 Sampler并使用以下代码来做到这一点:

    SampleResult.setIgnore()
    vars.entrySet().each { var ->
        if (var.getKey().startsWith("foo")) {
             props.put('user-' + ctx.getThreadNum() + '-' + var.getKey(), var.getValue())
        }
    }
    
  2. 在第二个线程组中,您需要执行相反的操作,将JMeter属性转换回JMeter变量:

    SampleResult.setIgnore()
    props.entrySet().each { prop ->
        if (prop.getKey().startsWith('user-' + ctx.getThreadNum() + '-foo')) {
            vars.put(prop.getKey().substring(prop.getKey().lastIndexOf('-') + 1), prop.getValue())
        }
    }
    
  3. foo替换为原始的JMeter变量参考名称

在上面的脚本中:

查看Top 8 JMeter Java Classes You Should Be Using with Groovy文章,以获取有关以上速记和其他JMeter API速记的更多信息。

P.S。最好使用ForEach Controller来迭代正则表达式提取器的结果。