【问题标题】:JMeter - Velocity JSR223 script can't use JMeter variables/environmentJMeter - Velocity JSR223 脚本不能使用 JMeter 变量/环境
【发布时间】:2019-10-20 18:01:41
【问题描述】:

我可以在 JMeter 4/5 中加载 Velocity as language to JSR223

我在 JSR223 语言列表中添加了 velocity-engine-core-2.0.jarvelocity-engine-scripting-2.0.jar,其中包括速度,

(也尝试了最新的速度2.1 versions

任何给出的文本都会被忽略的问题,即使我输入了无效的语法,它也不会抛出任何异常(如在其他语言中),或者使用varslog,...

似乎脚本没有执行,我该如何执行velocity JSR223脚本?我需要添加配置或罐子吗? 还是对速度有一些 JMeter/Java 限制?

试过例如:

log.info("Hello Velocity");
vars.put("a","Hello Velocity");
System.out.println("Hello Velocity");
NoExists.out.println("Hello Velocity");

我好像有velocity runtime dependencies

slf4j-api 1.7.25 是 是 是的,您还需要在运行时绑定 slf4j

commons-lang 3.5 是 是 是

库包含 slf4j-api-1.7.25.jar commons-lang3-3.8.1.jar 并将 slf4j-simple-1.7.25.jar 添加到默认 JMeter 库

日志:

2019-06-05 11:48:05,739 DEBUG o.a.j.c.GenericController: Calling next on: class org.apache.jmeter.control.GenericController
2019-06-05 11:48:05,739 DEBUG o.a.j.t.TestBeanHelper: Preparing class org.apache.jmeter.protocol.java.sampler.JSR223Sampler
2019-06-05 11:48:05,739 DEBUG o.a.j.t.TestBeanHelper: Setting scriptLanguage=velocity
2019-06-05 11:48:05,739 DEBUG o.a.j.t.TestBeanHelper: Setting parameters=
2019-06-05 11:48:05,739 DEBUG o.a.j.t.TestBeanHelper: Setting filename=
2019-06-05 11:48:05,739 DEBUG o.a.j.t.TestBeanHelper: Setting cacheKey=false
2019-06-05 11:48:05,739 DEBUG o.a.j.t.TestBeanHelper: Setting script=log.info("Hello Velocity");
vars.put("a","Hello Velocity");
System.out.println("Hello Velocity");
NoExists.out.println("Hello Velocity");
2019-06-05 11:48:05,739 DEBUG o.a.velocity: Initializing Velocity, Calling init()...
2019-06-05 11:48:05,739 TRACE o.a.velocity: *****************************
2019-06-05 11:48:05,739 DEBUG o.a.velocity: Starting Apache Velocity v2.0
2019-06-05 11:48:05,739 TRACE o.a.velocity: RuntimeInstance initializing.
2019-06-05 11:48:05,741 DEBUG o.a.velocity: Default Properties resource: org/apache/velocity/runtime/defaults/velocity.properties
2019-06-05 11:48:05,741 TRACE o.a.v.loader: ResourceManager initializing: class org.apache.velocity.runtime.resource.ResourceManagerImpl
2019-06-05 11:48:05,741 DEBUG o.a.velocity: ResourceLoader instantiated: org.apache.velocity.runtime.resource.loader.FileResourceLoader
2019-06-05 11:48:05,741 TRACE o.a.v.l.file: FileResourceLoader: initialization starting.
2019-06-05 11:48:05,741 DEBUG o.a.v.l.file: FileResourceLoader: adding path '.'
2019-06-05 11:48:05,741 TRACE o.a.v.l.file: FileResourceLoader: initialization complete.
2019-06-05 11:48:05,741 DEBUG o.a.velocity: initialized (class org.apache.velocity.runtime.resource.ResourceCacheImpl) with class java.util.Collections$SynchronizedMap cache map.
2019-06-05 11:48:05,741 TRACE o.a.v.loader: Default ResourceManager initialization complete.
2019-06-05 11:48:05,741 DEBUG o.a.velocity: Loaded System Directive: org.apache.velocity.runtime.directive.Stop
2019-06-05 11:48:05,742 DEBUG o.a.velocity: Loaded System Directive: org.apache.velocity.runtime.directive.Define
2019-06-05 11:48:05,742 DEBUG o.a.velocity: Loaded System Directive: org.apache.velocity.runtime.directive.Break
2019-06-05 11:48:05,742 DEBUG o.a.velocity: Loaded System Directive: org.apache.velocity.runtime.directive.Evaluate
2019-06-05 11:48:05,742 DEBUG o.a.velocity: Loaded System Directive: org.apache.velocity.runtime.directive.Macro
2019-06-05 11:48:05,742 DEBUG o.a.velocity: Loaded System Directive: org.apache.velocity.runtime.directive.Parse
2019-06-05 11:48:05,742 DEBUG o.a.velocity: Loaded System Directive: org.apache.velocity.runtime.directive.Include
2019-06-05 11:48:05,742 DEBUG o.a.velocity: Loaded System Directive: org.apache.velocity.runtime.directive.Foreach
2019-06-05 11:48:05,743 DEBUG o.a.v.parser: Created '20' parsers.
2019-06-05 11:48:05,743 TRACE o.a.v.macro: initialization starting.
2019-06-05 11:48:05,743 DEBUG o.a.v.macro: "velocimacro.library" is not set. Trying default library: VM_global_library.vm
2019-06-05 11:48:05,743 DEBUG o.a.v.macro: Default library not found.
2019-06-05 11:48:05,743 DEBUG o.a.v.macro: allowInline = true: VMs can be defined inline in templates
2019-06-05 11:48:05,743 DEBUG o.a.v.macro: allowInlineToOverride = false: VMs defined inline may NOT replace previous VM definitions
2019-06-05 11:48:05,743 DEBUG o.a.v.macro: allowInlineLocal = false: VMs defined inline will be global in scope if allowed.
2019-06-05 11:48:05,744 DEBUG o.a.v.macro: autoload off: VM system will not automatically reload global library macros
2019-06-05 11:48:05,744 TRACE o.a.v.macro: Velocimacro: initialization complete.
2019-06-05 11:48:05,744 TRACE o.a.velocity: RuntimeInstance successfully initialized.
2019-06-05 11:48:05,744 DEBUG o.a.j.c.GenericController: Calling next on: class org.apache.jmeter.control.GenericController

编辑

似乎无效的速度上下文会引发错误,

例如用于调用不存在速度变量$a

2019-06-05 12:39:28,804 DEBUG o.a.v.rendering: Null reference [template '<unknown>', line 2, column 7]: $a cannot be resolved.

但问题仍然是 JMeter 不能在其上下文中使用速度变量

编辑

解决方法是添加velocity LogTool (velocity-tools-generic-3.0.jar) 并使用$log

$log.debug( "Hello Velocity");

但是不能使用JMeter变量作为

$log.debug( "Hello " + vars.get("a"));

【问题讨论】:

  • 您是否在 GUI 中检查日志(选项 -> 日志查看器)?您的日志级别是否正确(选项 -> 日志级别)?
  • @lojza 是,OUT 也不起作用System.out.println,无效语法被忽略而不是异常
  • 检查您的日志:"velocimacro.library" is not setDefault library not found
  • 检查stackoverflow.com/questions/5313470/…时似乎无关紧要,如果不是你的建议是什么?
  • 抱歉,我没办法了 :-(

标签: java jmeter velocity jsr223 jmeter-5.0


【解决方案1】:

我发现了问题,在 Velocity 中,您需要在上下文变量名称前添加 $

所以不要使用vars,而是使用$vars

$log.debug( "Hello " + $vars.get("a"));

add Velocity to JMeter as JSR223 language有增强,你可以vote

【讨论】:

    猜你喜欢
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    相关资源
    最近更新 更多