我的JMeter版本是5.5
我正在使用 Backend Listener --> InfluxDB --> Grafana Dashboard 来显示实时执行结果。我的测试计划包括多个线程组和一个后端侦听器。我已将 influxdb url 存储在属性文件中,并将其作为 ${__P(influxdburl)} 传递给后端侦听器。
当我从单机后端监听器运行测试时,侦听器检测到变量并将结果发送到grafana,但是当我以分布式模式运行它时,它无法识别属性文件中的该值(我尝试将其传递到其他采样器中以检查我是否可以在那里访问它,它可以工作)。
当我传递 influxdb url 的硬编码值而不是尝试从属性文件访问它时,后端侦听器工作正常。
现在我正在尝试生成自定义后端侦听器,它应该从属性文件中获取该值(因为其他元素能够获取除后端侦听器之外的值)并将结果发送到 influxdb 并最终发送到 grafana。
这是我到目前为止所尝试的,访问用户参数/预处理器采样器中的值,然后将该变量发送到后端侦听器,但这不起作用。
我正在尝试在 beanshell 监听器中编写后端监听器并且
我的代码看起来像这样
import org.apache.jmeter.visualizers.backend.BackendListener;
import org.apache.jmeter.config.Arguments;
import org.apache.jorphan.collections.HashTree;
HashTree hashTree = new HashTree();
BackendListener backendListener = new BackendListener();
Arguments arguments = new Arguments();
arguments.addArgument("influxdbMetricsSender", "org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender");
arguments.addArgument("influxdbUrl", "myinfluxurl:port/write?db=dbname&p=somevalue");
arguments.addArgument("application", "myapplication");
arguments.addArgument("measurement", "jmeter");
arguments.addArgument("summaryOnly", "false");
arguments.addArgument("samplersRegex", ".*");
arguments.addArgument("percentiles", "90;95;99");
arguments.addArgument("testTitle","mytestname");
arguments.addArgument("eventTags"," ");
backendListener.setArguments(arguments);
hashTree.add(backendListener;
此代码不会将测试结果发送到grafana。我需要知道我在这里做错了什么以及如何改进?据我相信,我不应该生成新的 HashTree 对象并使用当前测试计划中的对象,但我不确定该怎么做(搜索 JMeterContext 但找不到与获取当前测试计划相关的任何方法)
我无法使用 JMeter 5.6.3 重现您的问题,并且无法在 changelog 中看到与后端侦听器相关的任何内容,所以我的期望是它也应该在 JMeter 5.5 上工作:
关于以编程方式添加侦听器的方法:
如果您想从代码构建测试计划,请查看以编程方式构建测试计划指南