Jmeter Backend Listener常规问题

时间:2018-05-28 05:39:30

标签: regex groovy jmeter

我试图将JMeter后端监听器添加到我的JMeter项目中,这样我就可以在Graphite中实时获得所有指标。我的测试分布在几个节点上运行,我想知道作为石墨路径一部分的主机名。我尝试合并JSR223脚本,但是在侦听器启动之前没有对它们进行评估,所以我在__groovy()字段中使用rootMetricsPrefix方法,如下所示:

${__groovy(vars.get(vars.get("environment")+".graphiteprefix"))}.server.
${__groovy(InetAddress.getLocalHost().getHostName()
.replaceAll(/^([^.]*).*$/){m,host->return host})}.
myappbucket.jmeter.

第一部分获取名称为" environment"的变量。获取环境的根前缀(" test"," load"等)。秒__groovy()脚本应该获取主机名的第一部分。如果我将它添加为JSR223采样器(以测试它),它可以工作,但如果我尝试将其用作变量,我会收到以下错误:

Script13.groovy: 1: expecting '}', found '' @ line 1, column 67.
   me().replaceAll(/^(^\.).*$/){m
                                 ^

1 error

    at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:158) ~[groovy-all-2.4.13.jar:2.4.13]
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233) ~[?:1.8.0_152]
    at org.apache.jmeter.functions.Groovy.execute(Groovy.java:121) [ApacheJMeter_functions.jar:4.0 r1823414]
    at org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:137) [ApacheJMeter_core.jar:4.0 r1823414]

1 个答案:

答案 0 :(得分:1)

根据JMeter documentation

  

如果函数参数包含逗号,那么请务必使用" \",将其转义,否则JMeter会将其视为参数分隔符。例如:

${__time(EEE\, d MMM yyyy)}

因此您需要在mhost

之间转义逗号
${__groovy(InetAddress.getLocalHost().getHostName() .replaceAll(/^(^\.).*$/){m\,host->return host})}. myappbucket.jmeter.

还要注意__machineName()__machineIP()函数,它们提供了一种获取JMeter引擎的主机名和IP地址的简单方法。有关JMeter函数的更全面信息,请参阅Apache JMeter Functions - An Introduction文章