在测试计划中运行一次Beanshell预处理器

时间:2015-11-26 21:38:28

标签: jmeter beanshell

我有一个Bean shell预处理器,最终根据用户传递的值设置一些全局变量,如主机名和路径。

所有线程组都将使用bean shell设置的变量。

目前我将我的BS预处理器放在一个线程之外,它运行得很好.. enter image description here

问题是它会针对每个不符合性能的线程运行

我只是希望它在测试计划开始时运行一次以提高性能。

我试图将它放入setUp线程但它不起作用。

我还可以使用哪些其他可以使用的BS预处理器具有性能效果(对整个计划只运行一次而不是每个线程)。

3 个答案:

答案 0 :(得分:2)

  1. 您可以将其置于If Controller下并使用以下条件:

    ${__BeanShell(vars.getIteration() == 1)} && ${__threadNum} == 1
    
  2. 您可以使用专为执行预测试操作而设计的setUp Thread Group,但在这种情况下,将所有出现的vars.put()更改为props.put(),因为JMeter变量范围仅限于当前线程组和Properties是整个JVM实例的全局属性。有关其他信息,请参阅How to Use Variables in Different Thread Groups指南

答案 1 :(得分:0)

JMeter SetUp线程组和TearDown线程组就是这样的。这些线程在测试计划的开始和结束时运行。因此,只需添加安装线程组并添加beanshells即可。有关详细信息,请参阅链接:

http://jmeter.apache.org/usermanual/component_reference.html#setUp_Thread_Group

另一方面,每个线程组的变量都是有限的。使用props来放置一个与所有线程组共享的值。

答案 2 :(得分:0)

这对我有用...只需配置一个名为firstTimeIndicator的用户定义变量并将其值设置为1

String firstTimeIndicator = "";
firstTimeIndicator = vars.get("firstTimeIndicator");
if (firstTimeIndicator.equals("1")) {
    log.info("The code inside the if statement executes once per test run...");
     firstTimeIndicator = "0";
     vars.put("firstTimeIndicator",firstTimeIndicator);
     }
log.info("The code after the if statement executes once per thread");