2017-09-26 150 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