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

Jmeter 在测试计划中运行Beanshell预处理器一次,jmeter,beanshell,Jmeter,Beanshell,我有一个BeanShell预处理器,它最终根据用户传递的值设置一些全局变量,如主机名和路径 BeanShell设置的变量将由所有线程组使用 目前,我已将我的BS预处理器置于线程之外,它运行得非常完美。。 问题是它针对性能不友好的每个线程运行 我只想在测试计划开始时运行一次,以提高性能 我试着把它放到一个安装线程中,但它不起作用 是否有其他我可以使用的BS预处理器可以提高性能(,它只对整个计划运行一次,而不是对每个线程运行一次) 您可以将其置于并使用以下条件: ${__BeanShell(var

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

BeanShell设置的变量将由所有线程组使用

目前,我已将我的BS预处理器置于线程之外,它运行得非常完美。。

问题是它针对性能不友好的每个线程运行

我只想在测试计划开始时运行一次,以提高性能

我试着把它放到一个安装线程中,但它不起作用

是否有其他我可以使用的BS预处理器可以提高性能(,它只对整个计划运行一次,而不是对每个线程运行一次)

  • 您可以将其置于并使用以下条件:

    ${__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定义:测试计划是一组测试(包括线程组)。因此,最后一条语句意味着在所有测试采样器之前运行脚本,而不是在每个测试采样器之前运行脚本。