JMeter - when NOT to use Cache compiled script if available

别等时光非礼了梦想. 提交于 2021-02-16 14:21:35

问题


I want to know when checking Cache compiled script if available checkbox is wrong,

Following Best practices there are some situations that Cache compiled script shouldn't be used, but the example of not using ${varName} is wrong, I did a test and the value it's taking is the updated value of ${varName} and not the first value.

When using JSR 223 elements, it is advised to check Cache compiled script if available property to ensure the script compilation is cached if underlying language supports it. In this case, ensure the script does not use any variable using ${varName} as caching would take only first value of ${varName}.

Does someone knows of a real case it's wrong to use caching?

EDIT

I check using ${varName} in script and there are similar results with/without caching:

I define variable in Jmeter called aa with value 1, and created a script:

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

Value 1 was return in both cases of checkbox, so it doesn't relate to caching

Also tried with Beanshell (not compiled language without def aa = "2";) and got same results.


回答1:


What is meant by documentation is that whenever ${varName} has a different value a new entry is stored in cache which will end up filling it with useless data.

So in this case it is wrong and ${varName} should be replaced with

vars.get("varName")

In fact I don't see real reason for unchecking this option provided you use the right JMeter syntax

The option is unchecked by default due to the risk described above and also for "non consensus" reasons:

  • 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

As to performance, it is exactly the same wether or not you check it for a language that does not support compilation as the first thing JMeter does is to check "supportsCompilable" before using the checkbox, see:

  • https://github.com/apache/jmeter/blob/trunk/src/core/org/apache/jmeter/util/JSR223TestElement.java#L171



回答2:


You should not be using caching when you use a scripting engine which does not support caching if compiled scripts. Since only Groovy is capable of compiling scripts you should tick this box for Groovy and untick for the other engines (the code block which does not make sense will be triggered each time the script will be called)

Well-behaved Groovy engine should:

  1. Compile script in the runtime to avoid interpretation each time
  2. Cache compiled script to avoid recompilation
  3. Recompile script and update the cache if any changes are being made to it.

Inlining JMeter functions and variables into scripts is a little bit dangerous for any language as it might resolve into something which cause compilation failure or even even worse result in code which you don't expect. In case of Groovy JMeter Variables syntax conflicts with Groovy GString template

So inlining variables will cause overhead for recompiling the script each time it's called.

So please continue following JMeter's Best Practices and remember one more little tip: avoid scripting where possible as none scripting option performance behaves as fast as Java does, check out Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For! guide for details.



来源:https://stackoverflow.com/questions/46418275/jmeter-when-not-to-use-cache-compiled-script-if-available

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!