如何使用JMeter使用BeanShell预处理器将数据传递给BeanShell采样器?

如何使用JMeter使用BeanShell预处理器将数据传递给BeanShell采样器?,jmeter,beanshell,Jmeter,Beanshell,我需要读取文件一次,其结果将在采样器中进一步处理。 我的策略是线程组-->BeanShell预处理器+BeanShell采样器 我的预处理器应该为整个线程组读取一次文件,并在特定线程数的采样器中使用结果。(我不想为每个线程读取文件) 我在预处理器中编写了文件读取器代码,现在需要在sampler中使用结果。用于存储已读取的值,然后在后续步骤中使用它们。请注意,每次执行线程循环时,预处理器都将运行 在beanshell预处理器中,可以存储如下变量: vars.put("name","value")

我需要读取文件一次,其结果将在采样器中进一步处理。 我的策略是线程组-->BeanShell预处理器+BeanShell采样器

我的预处理器应该为整个线程组读取一次文件,并在特定线程数的采样器中使用结果。(我不想为每个线程读取文件)

我在预处理器中编写了文件读取器代码,现在需要在sampler中使用结果。

用于存储已读取的值,然后在后续步骤中使用它们。请注意,每次执行线程循环时,预处理器都将运行

在beanshell预处理器中,可以存储如下变量:

vars.put("name","value")
然后在以后访问它

vars.get("name") 
在beanshell中,或在任何其他采样器的字段中作为
${name}

请注意,如果预处理器是主线程组的一部分,那么它将在每次线程循环时运行。如果这是一个昂贵的操作或值在运行期间没有更改,则可能需要使用

  • 不要使用Beanshell预处理器,因为它将由每个线程执行。使用带有1个线程的单独线程组读取值
  • 不要使用Beanshell采样器来创建实际负载,在负载或多或少严重的情况下,它将成为一个瓶颈
  • 使用“groovy”和“groovy”语言编写脚本——这样您就能够从代码中获得最大的性能 现在回答:

    int number = ctx.getThread().getThreadNum(); // get current thread number
    
    props.put("value_for_thread_" + number, "foo"); // store some value specific for the specific thread
    
    String value = props.get("value_for_thread_5"); // get value for thread 5
    
    其中:

    • ctx
      -是
    • props
      -代表JMeter属性,一个派生所有方法和字段的实例,对于整个JVM实例是全局的

    有关上述对象,请参阅JavaDocs,了解还可以做些什么,有关安装groovy脚本引擎、编写Beanshell、JSR223+groovy和Java代码的最佳实践和基准测试的说明,请参阅指南。

    感谢Dmitri,这一点已经说到了点子上,解释也很清楚。