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

时间:2015-09-16 10:39:31

标签: jmeter beanshell

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

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

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

2 个答案:

答案 0 :(得分:2)

  1. 不要使用Beanshell PreProcessor,因为它将由每个线程执行。使用具有1个线程的单独线程组来读取值。
  2. 不要使用Beanshell采样器来创建实际负载,如果负载或多或少,它将成为瓶颈。
  3. 使用JSR223 Test Elements和" groovy"脚本语言 - 这样您就可以从代码中获得最大的性能。
  4. 现在回答:

    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
    

    其中:

    请参阅JavaDocs了解上述对象以了解可以执行的其他操作,并参阅Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For!指导有关安装groovy脚本引擎,脚本最佳实践和Beanshell基准,JSR223 + groovy和Java代码的说明。

答案 1 :(得分:1)

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

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

vars.put("name","value")

然后以

的形式访问它
vars.get("name") 
在beanshell中

,或在任何其他采样器的字段中为${name}

请注意,如果您的预处理器是主线程组的一部分,则每次线程循环时都会运行它。如果这是一项昂贵的操作,或者在运行期间值没有变化,您可能需要使用setup thread group