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

时间:2016-09-17 05:11:48

标签: jmeter beanshell

我想在JMeter中使用BeanShell预处理器获取事务控制器的名称。  我希望以后使用标题管理器在dynaTrace中连接和显示。

我使用BeanShell监听器尝试了类似的东西

String test = sampleResult.getSampleLabel();
log.info(test);

但我想使用预处理器。

log.info(sampler.getName());

这用于获取采样器的名称,方式类似于我想获取事务控制器的名称。

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

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:4)

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

然而,您可以访问JMeter Test Plan Tree并从那里找出信息。示例代码如下所示:

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 Transaction Controller Name

有关使用Beanshell脚本中的JMeter API的一些信息:How to Use BeanShell: JMeter's Favorite Built-in Component