我想在JMeter中使用BeanShell预处理器获取事务控制器的名称。 我希望以后使用标题管理器在dynaTrace中连接和显示。
我使用BeanShell监听器尝试了类似的东西
String test = sampleResult.getSampleLabel();
log.info(test);
但我想使用预处理器。
log.info(sampler.getName());
这用于获取采样器的名称,方式类似于我想获取事务控制器的名称。
具体来说,我想使用BeanShell预处理器。
有人可以帮助我吗?
答案 0 :(得分:4)
你不能走得比Previous Result或Previous 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脚本中的JMeter API的一些信息:How to Use BeanShell: JMeter's Favorite Built-in Component