Jmeter 在测试计划中运行Beanshell预处理器一次
我有一个BeanShell预处理器,它最终根据用户传递的值设置一些全局变量,如主机名和路径 BeanShell设置的变量将由所有线程组使用 目前,我已将我的BS预处理器置于线程之外,它运行得非常完美。。 问题是它针对性能不友好的每个线程运行 我只想在测试计划开始时运行一次,以提高性能 我试着把它放到一个安装线程中,但它不起作用 是否有其他我可以使用的BS预处理器可以提高性能(,它只对整个计划运行一次,而不是对每个线程运行一次)Jmeter 在测试计划中运行Beanshell预处理器一次,jmeter,beanshell,Jmeter,Beanshell,我有一个BeanShell预处理器,它最终根据用户传递的值设置一些全局变量,如主机名和路径 BeanShell设置的变量将由所有线程组使用 目前,我已将我的BS预处理器置于线程之外,它运行得非常完美。。 问题是它针对性能不友好的每个线程运行 我只想在测试计划开始时运行一次,以提高性能 我试着把它放到一个安装线程中,但它不起作用 是否有其他我可以使用的BS预处理器可以提高性能(,它只对整个计划运行一次,而不是对每个线程运行一次) 您可以将其置于并使用以下条件: ${__BeanShell(var
${__BeanShell(vars.getIteration() == 1)} && ${__threadNum} == 1
vars.put()
更改为props.put()
,因为JMeter变量的作用域仅限于当前线程组,并且整个JVM实例的属性都是全局的。有关更多信息,请参阅指南JMeter设置线程组和拆卸线程组正是为了实现这一点。这些线程在测试计划的开始和结束时运行。所以,只需添加安装线程组并将beanshells添加到。有关更多信息,请参阅链接:
另一方面,每个线程组的变量都是有限的。使用道具放置一个与所有线程组共享的值。这对我很有用。。。只需配置一个名为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");
谢谢你。最后是第二种选择。不得不对线程进行一些调试和修改,但最终得到了我想要的结果。如前所述:设置线程组会一次又一次地启动,每个“普通线程组,用于测试”。问题是关于“只运行一次安装线程组,用于所有测试”。所以请重新考虑您的答案。看看jmeter定义:测试计划是一组测试(包括线程组)。因此,最后一条语句意味着在所有测试采样器之前运行脚本,而不是在每个测试采样器之前运行脚本。