JMeter 中分布式模式的后端监听器

问题描述 投票:0回答:1

我的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 grafana influxdb jmeter-plugins distributed-testing
1个回答
0
投票

我无法使用 JMeter 5.6.3 重现您的问题,并且无法在 changelog 中看到与后端侦听器相关的任何内容,所以我的期望是它也应该在 JMeter 5.5 上工作:

关于以编程方式添加侦听器的方法:

  1. 它不会工作,因为 HashTree 在执行 Beanshell 代码之前已初始化并加载
  2. 通常不鼓励使用 Beanshell 进行脚本编写,如果您想使用一些脚本扩展测试,则应该使用 JSR223 测试元素和 Groovy 语言。请参阅 Apache Groovy:Groovy 的用途是什么? 文章了解更多详细信息。

如果您想从代码构建测试计划,请查看以编程方式构建测试计划指南

© www.soinside.com 2019 - 2024. All rights reserved.