在我的JMeter测试计划中,我有3个交易控制器。 我想提取事务控制器名称并将其传递给Jmeter脚本。 我无法提取事务控制器名称,该名称显示在“日志查看器面板”中。
要打印事务名称,我使用了BeanShell Listener,代码如下:
String tname= sampleResult.toString();
if(tname.startsWith("T01_Login"))
{
log.info("*Transaction Name = " +sampleResult.toString() + " - Response time = " + sampleResult.getTime());
String temp = sampleResult.toString();
String temp2 = sampleResult.getTime().toString();
vars.put("Transaction_Name",temp);
vars.put("Response", temp2);
log.info(vars.get("Response"));
log.info(vars.get("Transaction_Name"));
}
我使用BSF后处理器来存储/提取事务名称,使用以下代码:
选择的语言:Javascript
var transact = ${Transaction_Name};
vars.put ("TRANSACT",transact);
log.info(TRANSACT);
选中LogViewer面板后,将显示以下文本:
2017/03/27 17:06:13 INFO - jmeter.util.BeanShellTestElement: *Transaction Name = T01_Login - Response time = 39829
2017/03/27 17:06:13 INFO - jmeter.util.BeanShellTestElement: 39829
2017/03/27 17:06:13 INFO - jmeter.util.BeanShellTestElement: T01_Login
请提供宝贵的建议。
答案 0 :(得分:1)
要解决阻止后处理器运行的错误,请使用vars.get
,而不是var transact = ${Transaction_Name};
,即
var transact = vars.get("Transaction_Name");
设置另一个变量(vars.put ("TRANSACT",transact);
)是不必要的:只需使用Transaction_Name
即可。 (另一个小注:BSF对象集现已弃用,因此将它们切换为JSR322或BeanShell)
但它无论如何都行不通,因为执行的顺序是
Sampler > Post-processor > Listener > Transaction Controller > Listener
因此,后处理器中Transaction_Name
的值将为空(在第一次迭代时),或者将来自上一次迭代,我猜这不是你想要的。
您没有提及您的用例,但您有一些选择:
在交易控制器之后有一个特殊的采样器,可以在后处理器中执行您想要的操作。例如:
Transaction Controller
Some Sampler
...
JSR223 / Beanshell sampler
第二个采样器可以获得正确的交易名称,因为它在交易后运行
在调用事务之前将事务名称保存到变量中。将事务控制器名称设置为该变量:
JSR223 / Beanshell sampler
sets variable: vars.put("Transaction_Name", "T01_Login");
${Transaction_Name} <-- this is the name of the transaction controller
Sampler
Post-processor <-- here the Transaction_Name can be obtained.