2017-09-05 106 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"); 
相關問題