我在jmeter中使用正则表达式提取器来捕获将在下一个http请求中传递的值。
捕获的值是myModel
,Property '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请求也将在单独的线程组中。
请帮助创建正确的代码来处理此循环逻辑。我不希望使用for循环控制器,因为在非GUI模式下运行时遇到堆栈溢出错误。
请告知如何使正则表达式提取器的输出可用于单独线程组中的http请求。
答案 0 :(得分:0)
要将正则表达式提取器的输出从一个Thread Group传递到另一个,您需要:
在第一个线程组中将相关的JMeter变量转换为JMeter属性。您可以通过在第一个线程组的末尾添加一个JSR223 Sampler并使用以下代码来做到这一点:
SampleResult.setIgnore()
vars.entrySet().each { var ->
if (var.getKey().startsWith("foo")) {
props.put('user-' + ctx.getThreadNum() + '-' + var.getKey(), var.getValue())
}
}
在第二个线程组中,您需要执行相反的操作,将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())
}
}
将foo
替换为原始的JMeter变量参考名称
在上面的脚本中:
vars
-代表JMeterVariables类实例,提供对范围内所有JMeter变量的编程读/写访问props
-JMeter属性,基本上是java.util.Properties的实例查看Top 8 JMeter Java Classes You Should Be Using with Groovy文章,以获取有关以上速记和其他JMeter API速记的更多信息。
P.S。最好使用ForEach Controller来迭代正则表达式提取器的结果。