2017-08-16 36 views
0

JSR223 Sampler有Groovy就是實現比其他腳本語言不同Compilable interface,因此建議JMeter的腳本引擎,它允許緩存和編譯

從高速緩存和編譯受益的聲明中,用於 腳本語言引擎必須實現JSR223可編譯接口(Groovy是的 這些,JAVA,BeanShell的一個和javascript都沒有)

我試着在JSR223使用similar code檢查它採樣。 我試圖檢查所有可用的語言與可編譯:

import javax.script.Compilable; 
import javax.script.ScriptEngineFactory; 
import javax.script.ScriptEngineManager; 
ScriptEngineManager mgr = new ScriptEngineManager(); 
    engineFactories = mgr.getEngineFactories(); 
    for (ScriptEngineFactory engineFactory : engineFactories) { 

     if (engineFactory instanceof Compilable) { 
       log.info(engineFactory.getEngineName() + " Script compilation is supported."); 
      } else { 
       log.info(engineFactory.getEngineName() + " Script compilation is not supported."); 
      } 
    } 

我的結果是:

Oracle Nashorn Script compilation is not supported. 
JEXL Engine Script compilation is not supported. 
Groovy Scripting Engine Script compilation is not supported. 
JEXL Engine Script compilation is not supported. 
Velocity Script compilation is not supported. 
BeanShell Engine Script compilation is not supported. 

含義沒有支持彙編,

編輯1 根據我改變@ aristotll的支票,現在它返回全部支持彙編

final ScriptEngine engine = engineFactory.getScriptEngine(); 
if (engine instanceof Compilable) { 

EDIT 2

根據@aristotll第二編輯我改變

try { 
      ((Compilable) engine).compile(""); 
         log.info(engineFactory.getEngineName() + " Script compilation is supported."); 
     } catch (Error e) { 
      log.info(engineFactory.getEngineName() + " Script compilation is not supported."); 

我得到有趣的結果:犀牛和JEXL支持

Groovy Scripting Engine Script compilation is supported. 
Oracle Nashorn Script compilation is supported. 
JEXL Engine Script compilation is supported. 
BeanShell Engine Script compilation is not supported. 
JEXL Engine Script compilation is supported. 

上午我檢查錯了什麼?我是否需要導入更多的罐子來啓用它? 如何知道腳本引擎是否使用緩存和編譯? JMeter的陳述是錯誤的/過時的?

回答

1

你需要得到ScriptEngine實例,而不是ScriptEngineFactory

final ScriptEngine engine = engineFactory.getScriptEngine(); 
if (engine instanceof Compilable) { 
... 

爲什麼所有Compilable?因爲這些腳本引擎將來可能會編譯。但目前不支持,所以他們都實現了這個接口。 您可以嘗試編譯空字符串:

if (engine instanceof Compilable) { 
     try { 
      ((Compilable) engine).compile(""); 
     } catch (Error e) { 
      System.out.println(engineName + " Script compilation is not supported."); 
     } catch (ScriptException e) { 
      e.printStackTrace(); 
     } 
     System.out.println(engineName + " Script compilation is supported."); 
    } else { 
     System.out.println(engineName + " Script compilation is not supported."); 
    } 
+0

謝謝。但現在我得到所有的腳本引擎支持編譯 – user7294900

+0

@ user7294900我更新我的答案。 – aristotll

+0

Groovy腳本引擎支持腳本編譯。 支持Oracle Nashorn腳本編譯。 支持JEXL引擎腳本編譯。 不支持BeanShell引擎腳本編譯。 支持JEXL引擎腳本編譯。 – user7294900