我有一个Bean shell预处理器,最终根据用户传递的值设置一些全局变量,如主机名和路径。
所有线程组都将使用bean shell设置的变量。
问题是它会针对每个不符合性能的线程运行。
我只是希望它在测试计划开始时运行一次以提高性能。
我试图将它放入setUp线程但它不起作用。
我还可以使用哪些其他可以使用的BS预处理器具有性能效果(对整个计划只运行一次而不是每个线程)。
答案 0 :(得分:2)
您可以将其置于If Controller下并使用以下条件:
${__BeanShell(vars.getIteration() == 1)} && ${__threadNum} == 1
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");