【问题标题】:JMeter- property values are not substituted when running from CLI从 CLI 运行时不会替换 JMeter 属性值
【发布时间】:2019-10-23 01:00:41
【问题描述】:

我目前在 Mac 上使用 JMeter 5.1.1,并开发了一个非常简单的 JMeter 项目来通过命令行测试属性值替换。我的 JMeter 项目非常简单,使用 Dummy Sampler 尝试打印以下内容

${__P(resources.folder)}, ${__P(propertiesfile)} and ${__property(propertiesfile)}

Link to JMeter project image

我正在尝试使用命令通过 CLI 运行这个项目

jmeter -n -t TestProj.jmx -l jmeter/TestProjResults.jtl -j jmeter/TestProj.log -Dresources.folder=/Users/h244955/Coding/bga/spogdashboard/tests/perf -Dpropertiesfile=baforgeperfproperties

这些值没有被替换,我在日志中看到以下内容:

2019-10-22 20:48:09,531 调试 o.a.j.e.u.ValueReplacer:即将在类型的属性中替换:类 org.apache.jmeter.testelement.property.StringProperty:${__P(resources.folder)} ${__P(propertiesfile)} ${__property(propertiesfile)} 2019-10-22 20:48:09,533 DEBUG o.a.j.t.p.AbstractProperty:未运行版本,返回原始函数字符串 2019-10-22 20:48:09,533 DEBUG o.a.j.e.u.ValueReplacer:替换结果:${__P(resources.folder)} ${__P(propertiesfile)} ${__property(propertiesfile)} 2019-10-22 20:48:09,534 DEBUG o.a.j.e.u.ValueReplacer:即将替换类型的属性:类 org.apache.jmeter.testelement.property.StringProperty:用于模拟请求和响应的虚拟采样器 没有实际的网络活动。这有助于调试测试。 2019-10-22 20:48:09,534 DEBUG o.a.j.e.u.ValueReplacer:替换结果:用于模拟请求和响应的虚拟采样器 没有实际的网络活动。这有助于调试测试。 2019-10-22 20:48:09,534 调试 o.a.j.e.u.ValueReplacer:即将替换类型的属性:类 org.apache.jmeter.testelement.property.StringProperty:${__Random(50,500)} 2019-10-22 20:48:09,534 DEBUG o.a.j.t.p.AbstractProperty:未运行版本,返回原始函数字符串 2019-10-22 20:48:09,534 DEBUG o.a.j.e.u.ValueReplacer:替换结果:${__Random(50,500)}

但是,当我在使用 JSR223 采样器声明相同属性的帮助下从 GUI 运行此项目时,值将按预期在虚拟采样器中被替换。我试图四处寻找上面突出显示的日志的答案,但徒劳无功。

【问题讨论】:

    标签: testing jmeter performance-testing


    【解决方案1】:

    你需要 override JMeter property 使用 -J:

     jmeter -n -t TestProj.jmx -Jresources.folder=/Users/h244955/Coding/bga/spogdashboard/tests/perf -Jpropertiesfile=baforgeperfproperties -l jmeter/TestProjResults.jtl -j jmeter/TestProj.log 
    

    -D[prop_name]=[值] 定义一个 java 系统属性值。 -J[prop_name]=[值] 定义一个本地 JMeter 属性。

    要添加额外的 JMeter 属性文件,请使用 -q

    -q, --addprop <argument>
        additional JMeter property file(s)
    

    【讨论】:

    • 感谢您的回复。但是,即使尝试这种方式,我仍然遇到问题。也许这是我调用属性的方式。我正在 JSR223 log.info("======Variable Value: " + ${__P(foo)}); //Returns an error since it searches for variable "bar" log.info("======Variable Value: " + props.get("foo")); //Returns null 中尝试以下操作
    • @ragz 如果您想要其他属性文件,请使用-q baforgeperfproperties
    • 这些是系统属性还是 Jmeter 属性?
    • 另外,我们在“If Controller”之类的东西中引用系统属性和 Jmeter 属性的方式有区别吗?
    • @Ragz JMeter 属性,两个属性相同
    【解决方案2】:

    我无法重现该问题:

    所以我的期望是您的 JMeter 安装以某种方式损坏,即确保 ApacheJMeter_functions.jar 文件存在于您的 JMeter 安装的“lib/ext”文件夹中

    1. 确保从official downloads pagecheck the downloaded archive integrity 获取JMeter,详情请查看How to Get Started With JMeter: Part 1 - Installation & Test Plans 文章。
    2. 确保从其“bin”文件夹中启动 JMeter,以了解

      cd /path/where/jmeter/lives/bin 
      ./jmeter -Dpropertiesfile=baforgeperfproperties -n -t test.jmx ....
      

      这个./jmeter 位对于确保您从当前文件夹启动 JMeter 很重要,而不是从 MacOS 中的另一个文件夹启动 PATH

    【讨论】:

    • 感谢@Dmitri T 的回复。我尝试了您的建议,并且能够打印“参数”。但是,当我执行以下操作时,我看到了问题:log.info("======Variable Value: " + ${__P(foo)}); //Returns an error since it searches for variable "bar" . log.info("======Variable Value: " + props.get("foo")); //Returns null
    • 另外,我们在“If Controller”之类的东西中引用系统属性和 Jmeter 属性的方式有区别吗?
    猜你喜欢
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 2020-07-19
    • 1970-01-01
    相关资源
    最近更新 更多