JMeter:在JMeter测试计划中提取并传递事务控制器名称

JMeter:在JMeter测试计划中提取并传递事务控制器名称,jmeter,jmeter-plugins,Jmeter,Jmeter Plugins,在我的JMeter测试计划中,我有3个事务控制器。 我想提取事务控制器名称并将其传递给Jmeter脚本。 我无法提取显示在“日志查看器面板”中的事务控制器名称 为了打印事务名称,我使用了BeanShell Listener,代码如下: String tname= sampleResult.toString(); if(tname.startsWith("T01_Login")) { log.info("*Transaction Name = " +sampleResult.toString()

在我的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 

请就此提供宝贵的建议。

要解决阻止后处理器运行的错误,请使用
vars.get
,而不是
var transact=${Transaction\u Name},即

var transact = vars.get("Transaction_Name");
设置另一个变量(
vars.put(“TRANSACT”,TRANSACT);
)是不必要的:只需使用
Transaction\u Name
。(另一个小提示是:BSF对象集现在已不推荐使用,因此请将它们切换到JSR322或BeanShell)

但它无论如何都不会起作用,因为执行的顺序是

Sampler > Post-processor > Listener > Transaction Controller > Listener
因此,后处理器中
Transaction\u 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.
    
    JSR223/Beanshell取样器
    设置变量:vars.put(“事务名称”、“T01\u登录”);
    
    ${Transaction_Name}感谢Kiril S,感谢您的宝贵建议,我的用例是,我必须提取事务控制器名称及其响应时间(根据测试计划执行情况),并将其推送到我本地机器的数据库中,请您提供同样的建议。