JMeter-何时不使用Cache编译脚本(如果可用)
问题内容:
我想知道勾选Cache compiled script if available
复选框的时间
按照最佳实践,在某些情况下不应使用Cache编译脚本,但是未使用的示例${varName}
是错误的,我进行了测试,并且它采用的值是的更新值,${varName}
而不是第一个值。
使用JSR 223元素时,建议检查“缓存编译的脚本”是否有可用属性,以确保在基础语言支持的情况下缓存脚本编译。在这种情况下,请确保脚本不使用任何使用$
{varName}的变量,因为缓存将仅采用$ {varName}的第一个值。
有人知道真实情况下使用缓存是错误的吗?
编辑
我在脚本中使用$ {varName}进行检查,无论是否进行缓存,都有类似的结果:
我在Jmeter中定义了aa
以值1 调用的变量,并创建了一个脚本:
def aa = "2";
aa = "3";
log.info("${aa}");
在两种情况下都返回值1,因此它与缓存无关
还尝试了Beanshell(没有def aa =“ 2”;的非编译语言)得到了相同的结果。
问题答案:
文档的含义是,每当$ {varName}具有不同的值时,新条目就会存储在缓存中,最终将用无用的数据填充它。
因此,在这种情况下,这是错误的,应将$ {varName}替换为
vars.get(“ varName”)
实际上,如果您使用正确的JMeter语法,我看不出取消选中此选项的真正原因
由于上述风险以及“非共识”原因,默认情况下未选中此选项:
- https://bz.apache.org/bugzilla/show_bug.cgi?id=56554
- http://mail-archives.apache.org/mod_mbox/jmeter-dev/201212.mbox/%3CCAH9fUpZ7dMvuxq9U5iQYoBtVX7G-TqOx4aJjjOnPcp%3D5Fc%3D8Qw%40mail.gmail.com%3E
- http://mail-archives.apache.org/mod_mbox/jmeter-dev/201301.mbox/%3CCAH9fUpbnde3mnyKmHXwoQeL-SqZUA0Wt1%3D%3D-XMxQWq3ZAS6Pvw%40mail.gmail.com%3E
至于性能,无论您是否为不支持编译的语言检查它,都与JMeter所做的第一件事就是在使用复选框之前检查“
supportsCompilable”完全相同,请参见:
- https://github.com/apache/jmeter/blob/trunk/src/core/org/apache/jmeter/util/JSR223TestElement.java#L171