我试图将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]
答案 0 :(得分:1)
如果函数参数包含逗号,那么请务必使用" \",将其转义,否则JMeter会将其视为参数分隔符。例如:
${__time(EEE\, d MMM yyyy)}
因此您需要在m
和host
${__groovy(InetAddress.getLocalHost().getHostName() .replaceAll(/^(^\.).*$/){m\,host->return host})}. myappbucket.jmeter.
还要注意__machineName()和__machineIP()函数,它们提供了一种获取JMeter引擎的主机名和IP地址的简单方法。有关JMeter函数的更全面信息,请参阅Apache JMeter Functions - An Introduction文章