2017-09-05 107 views
1

我通过使用JSON和正则表达式提取器在脚本中生成大量变量。Jmeter - 从表达式提取器生成的重置变量

我需要重置这些为我处理每个测试记录,以确保每个使用正确的提取值。

问题(如果是问题)是生成的值由一些数组元素或组组成。

例如:

Regular expression extractor generating Reference Name: identifier 
This generates: 

- Identifier 
- Identifier_g 
- Identifier_g0 
- Identifier_g1 

我可以使用vars.put("Identifier",null);在一个BeanShell中的适当位置,但是这不会重置其他项目成功复位标识符。

我有一些这些提取发生,他们产生的结果数量可能会有所不同,所以上面的'g'值可能会改变。

有关如何重置这些(或者即使我需要)的任何建议?

+1

您是否使用了'..._ g'变量?你依靠他们不存在吗?如果是的话,你的脚本的逻辑是什么? 一般的答案是:不,不要重置它们,JMeter会在下一场比赛中为你做(参见http://jmeter.apache.org/usermanual/component_reference.html#Regular_Expression_Extractor:“如果没有匹配发生,那么refName变量被设置为默认值(除非不存在)。此外,下列变量被删除refName_g0,refName_g1,refName_g“) –

+0

恐怕接受的答案只是在工程,但为什么不。 –

回答

1

如果您可以重置一个变量 - 您可以重置它们,我推荐的唯一方法是使用Groovy代替Beanshell。其原因是:

参考文献:

最后相关的Groovy代码,可以将所有的名字开始Identifier

vars.getIterator().each { 
    def name = it.getKey() 
    if (name.startsWith('Identifier')) { 
     vars.put(name, null) 
    } 
} 
+0

这可以工作,但我得到一个java.util.Collections $ UnmodifiableMap $ UnmodifiableEntrySet $ 1 @ ...错误。有什么想法吗? – Tufty

0

每当提取器再次运行时,它会自动清除旧值。

这只会是一个问题,如果你在不同的提取器中使用相同的var名称。

0

当您使用Regular expression和定义模板$1$变量例如它只需要Identifier_g1值,这意味着匹配正则表达式的组1,其他值不会在正常流程中使用,因此您不需要关心它们。

组数是恒定的,基本上你在Regular expression(\ w +)=(\ d +)中创建的圆括号数将创建2个组,因此您必须删除,直到Identifier_g2。

如果您希望添加JSR 223元素以删除特定值。

您可以选择JSR223 SamplerJSR223 PreProcessorJSR223 PostProcessor,具体取决于您希望何时执行它。注意,采样器将被包含在报告中,如果脚本失败,将被标记为失败。

代码在你的情况:

vars.remove("Identifier"); 
vars.remove("Identifier_g"); 
vars.remove("Identifier_g0"); 
vars.remove("Identifier_g1"); 
相关问题