如何使用jmeter中的beanshell预处理器获取给定给事务控制器的名称

如何使用jmeter中的beanshell预处理器获取给定给事务控制器的名称,jmeter,beanshell,Jmeter,Beanshell,我想使用JMeter中的BeanShell预处理器获取事务控制器的名称。 我想在以后使用header manager在dynaTrace中连接和显示它 我用BeanShell listener做了类似的尝试 String test = sampleResult.getSampleLabel(); log.info(test); 但是我想使用预处理器 log.info(sampler.getName()); 这用于获取采样器的名称,与我想要获取事务控制器的名称的方式类似 具体来说,我想使用Be

我想使用JMeter中的BeanShell预处理器获取事务控制器的名称。 我想在以后使用header manager在dynaTrace中连接和显示它

我用BeanShell listener做了类似的尝试

String test = sampleResult.getSampleLabel();
log.info(test);
但是我想使用预处理器

log.info(sampler.getName());
这用于获取采样器的名称,与我想要获取事务控制器的名称的方式类似

具体来说,我想使用BeanShell预处理器


有人能帮我吗?

你不能走得太远,或者我会说,这不是你能轻易实现的。看起来您的测试设计得不是很好,因为人们通常不需要知道父采样器控制器的名称

尽管如此,你还是可以从那里获得信息。示例代码如下所示:

import org.apache.jmeter.control.TransactionController;
import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jorphan.collections.HashTree;
import org.apache.jorphan.collections.SearchByClass;

import java.lang.reflect.Field;
import java.util.Collection;

StandardJMeterEngine engine = ctx.getEngine();
Field test = engine.getClass().getDeclaredField("test");
test.setAccessible(true);
HashTree testPlanTree = (HashTree) test.get(engine);

SearchByClass txnCtrlSearch = new SearchByClass(TransactionController.class);
testPlanTree.traverse(txnCtrlSearch);
Collection txnControllers = txnCtrlSearch.getSearchResults();

for (Object txnController : txnControllers) {
    log.info(((TransactionController) txnController).getName());
}
演示:


关于使用Beanshell脚本中的JMeter API的一些信息:

您不能走得更远,因此我要声明,这不是您可以轻松实现的。看起来您的测试设计得不是很好,因为人们通常不需要知道父采样器控制器的名称

尽管如此,你还是可以从那里获得信息。示例代码如下所示:

import org.apache.jmeter.control.TransactionController;
import org.apache.jmeter.engine.StandardJMeterEngine;
import org.apache.jorphan.collections.HashTree;
import org.apache.jorphan.collections.SearchByClass;

import java.lang.reflect.Field;
import java.util.Collection;

StandardJMeterEngine engine = ctx.getEngine();
Field test = engine.getClass().getDeclaredField("test");
test.setAccessible(true);
HashTree testPlanTree = (HashTree) test.get(engine);

SearchByClass txnCtrlSearch = new SearchByClass(TransactionController.class);
testPlanTree.traverse(txnCtrlSearch);
Collection txnControllers = txnCtrlSearch.getSearchResults();

for (Object txnController : txnControllers) {
    log.info(((TransactionController) txnController).getName());
}
演示:


关于使用Beanshell脚本中的JMeter API的一些信息:

简短回答:您不能。谢谢@KIril S….如果不是Beanshell预处理器,那么有没有办法获取事务名称..JMeter没有给您任何好的方法来获取除当前元素之外的任何元素。你想达到什么目标?如果您解释我试图在dynaTrace中获取聚合报告的目标是什么,可能会找到解决方法,与我们在jmeter中得到的方法相同。为此,我将两个值传递给dynaTrace PC=jmeter NA采样器名称/事务控制器名称。我不想将NA添加到每个标头管理器中,而是想添加一个beanshell预处理器,它将采用transsaction控制器名称,并将该变量放入标头管理器sampler中。getName提供采样器每个采样器的名称都是一样的,我试图得到一个简短的答案:你不能。谢谢@KIril S…。如果不是beanshell预处理器,那么有没有办法获取事务名称..JMeter没有给你任何好的方法来获取除当前元素以外的任何元素。你想达到什么目标?如果您解释我试图在dynaTrace中获取聚合报告的目标是什么,可能会找到解决方法,与我们在jmeter中得到的方法相同。为此,我将两个值传递给dynaTrace PC=jmeter NA采样器名称/事务控制器名称。我不想将NA添加到每个标头管理器中,而是想添加一个beanshell预处理器,它将采用transsaction控制器名称,并将该变量放入标头管理器sampler中。getName提供采样器每个采样器的名称以同样的方式,我正在尝试获取Hi@shey你能解释一下你是如何在你的脚本中实现此代码以在header manager中获取事务控制器名称的吗?Hi@shey你能解释一下你是如何在你的脚本中实现此代码以在header manager中获取事务控制器名称的吗。