在Jmeter 5.0中通过JSR223预处理器执行Groovy脚本时观察错误

时间:2019-04-03 05:32:38

标签: groovy jmeter jmeter-5.0

我不熟悉Jmeter。我试图从一个普通的脚本中获取格林尼治标准时间12:00 am的时间戳,并将其转换为Epoc计时器

代码段

use(groovy.time.TimeCategory) {
    daytime = new Date()
    daytime.set(hourOfDay: 0, minute: 0, second: 0)
    time=daytime.getTime()
    log.info(time)

}

当我在groovy Editor上在线运行此代码时,得到了预期的响应 上面脚本的响应:1554249600472

当我在Jmeter中使用JSR223采样器运行相同的脚本时,出现以下错误响应

2019-04-03 10:54:06,597错误o.a.j.m.JSR223PreProcessor:JSR223脚本,JSR223 PreProcessor中的问题 javax.script.ScriptException:groovy.lang.MissingMethodException:无方法签名:org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.use()适用于参数类型:(java.lang.Class,Script20 $ _run_closure1)值:[ groovy.time.TimeCategory类,Script20 $ _run_closure1 @ 6aaee2b9] 可能的解决方案:use(java.lang.Class,groovy.lang.Closure),use(java.util.List,groovy.lang.Closure),use([Ljava.lang.Object;),grep(),any( ),dump()     在org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:324)〜[groovy-all-2.4.15.jar:2.4.15]     在org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:72)〜[groovy-all-2.4.15.jar:2.4.15]     在javax.script.CompiledScript.eval(未知来源)〜[?:1.8.0_201]     在org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:221)〜[ApacheJMeter_core.jar:5.0 r1840935]     在org.apache.jmeter.modifiers.JSR223PreProcessor.process(JSR223PreProcessor.java:44)上[ApacheJMeter_components.jar:5.0 r1840935]     在org.apache.jmeter.threads.JMeterThread.runPreProcessors(JMeterThread.java:935)上[ApacheJMeter_core.jar:5.0 r1840935]     org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:537)[ApacheJMeter_core.jar:5.0 r1840935]     在org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:486)上[ApacheJMeter_core.jar:5.0 r1840935]     在org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:253)上[ApacheJMeter_core.jar:5.0 r1840935]     在java.lang.Thread.run(未知来源)[?: 1.8.0_201] 引起原因:groovy.lang.MissingMethodException:方法的无签名:org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.use()适用于参数类型:(java.lang.Class,Script20 $ _run_closure1)值:[class groovy。 time.TimeCategory,Script20 $ _run_closure1 @ 6aaee2b9] 可能的解决方案:use(java.lang.Class,groovy.lang.Closure),use(java.util.List,groovy.lang.Closure),use([Ljava.lang.Object;),grep(),any( ),dump()     在org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.callGlobal(GroovyScriptEngineImpl.java:403)〜[groovy-all-2.4.15.jar:2.4.15]     在org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.access $ 100(GroovyScriptEngineImpl.java:94)〜[groovy-all-2.4.15.jar:2.4.15]     在org.codehaus.groovy.jsr223.GroovyScriptEngineImpl $ 3.invokeMethod(GroovyScriptEngineImpl.java:307)〜[groovy-all-2.4.15.jar:2.4.15]     在org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:68)〜[groovy-all-2.4.15.jar:2.4.15]     在org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:51)〜[groovy-all-2.4.15.jar:2.4.15]     在org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:157)〜[groovy-all-2.4.15.jar:2.4.15]     在org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:177)〜[groovy-all-2.4.15.jar:2.4.15]     在Script20.run(Script20.groovy:1)〜[?:?]     在org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:321)〜[groovy-all-2.4.15.jar:2.4.15]

...还有9个

2 个答案:

答案 0 :(得分:0)

我不知道为什么use对您不起作用(可能是普通版本或其他)

但是您不需要它来清除时间:

def daytime = new Date()
daytime.clearTime()                     //clear the time
log.info( daytime.getTime() as String ) //print time as milliseconds

答案 1 :(得分:0)

谢谢您,亲爱的,您的友好和快速的响应,对输出的输出进行了类型转换。 下面是给我成功回复的代码段

use(groovy.time.TimeCategory) {
   def  daytime = new Date()
    daytime.set(hourOfDay: 0, minute: 0, second: 0)
    starttime=daytime+5.hour+30.minute
    time=starttime.getTime()
    log.info(time as String) 
   }