2017-09-26 147 views
0

我想檢查Cache compiled script if available複選框是錯誤的,當知道,JMeter的 - 當不使用緩存編譯腳本(如果可用)

以下Best practices也有一些情況下是高速緩存編譯腳本不應該使用,但不是的例子使用${varName}是錯誤的,我做了一個測試,它所取的值是更新後的值${varName}而不是第一個值。

當使用JSR 223元,建議檢查緩存編譯 腳本(如果可用)屬性,以確保腳本編譯 如果底層語言支持它的緩存。在這種情況下,請確保 腳本不使用任何使用$ {varName}的變量,因爲緩存 僅取得$ {varName}的第一個值。

有人知道一個真實的案例使用緩存是錯誤的嗎?

EDIT

我檢查使用$ {的varName}在腳本和有類似的結果有/無緩存:

我在的JMeter限定可變稱爲aa具有值1,並且創建了一個腳本:

def aa = "2"; 
aa = "3"; 
log.info("${aa}"); 

值1是複選框的這兩種情況下的回報,因此它不涉及到緩存

也嘗試過與Beanshell(不編譯語言沒有def aa =「2」;)並得到相同的結果。

+0

對不起,我還是沒有得到它的時候是錯的。看到我的**編輯**似乎$ {varName}的情況是不相關的 – user7294900

+0

你讀過我更新的答案嗎?即使它起作用,它也會導致緩存中出現一個新條目 –

+0

我添加了爲什麼它是這樣的參考 –

回答

1

文檔的含義是,每當$ {varName}具有不同的值時,新的條目將被存儲在緩存中,最終會用無用的數據填充它。

因此,在這種情況下,它是錯誤的,$ {varName的}應與

瓦爾替換。獲得(「varName的」)

其實我沒有看到真正原因取消選中此選項提供你使用了正確的JMeter語法

該選項默認爲未選中由於以上,也說明風險對於 「非共識」 的原因:

至於性能,它是完全一樣的羯羊或不是你檢查它不支持編譯爲第一件事JMeter的作用是使用複選框前的檢查「supportsCompilable」一語,請參閱:

+0

所以沒有理由?此選項默認未選中 – user7294900

+0

我通過編輯我的答案來回答。 –

0

當你使用一個腳本引擎,如果編譯腳本不支持緩存你不應該使用緩存。由於只有Groovy是能夠編制腳本,你應該勾選此框Groovy和勾去掉了其他引擎

Well-behaved Groovy engine should(代碼塊,沒有任何意義將每個腳本將被調用時觸發):

  1. 在運行時編譯腳本,以避免解釋每次
  2. 緩存編譯腳本,以避免重新編譯
  3. 重新編譯腳本,如果任何變化正在向它提出的更新緩存。

將JMeter函數和變量內聯到腳本中對於任何語言來說都有點危險,因爲它可能會導致編譯失敗甚至更糟糕的結果,而這些結果並不是你期望的。如果Groovy JMeter變量與Groovy GString template的語法衝突

因此內聯變量會導致在每次調用腳本時重新編譯腳本的開銷。

所以,請繼續下面的JMeter的最佳實踐,並記住一個多一點提示:避免腳本在可能爲無腳本選項的性能表現一樣快,Java那樣,退房Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For!指南。

+0

當我查看其他語言支持緩存時,請參閱https://commonss.apache.org/,查看https://stackoverflow.com/questions/45708631/jmeter-script-engine-which-allow-caching-and-compilation查看jexl https://commons.apache.org/適當/公地JEXL/apidocs /組織/阿帕奇/公/ jexl3 /腳本/ JexlScriptEngine.html – user7294900