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

How to pass data to BeanShell sampler using BeanShell preprocessor using JMeter?

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

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

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

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

在你的 beanshell 预处理器中,你可以像这样存储一个变量:

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

然后稍后以

访问它
vars.get("name") 

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

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

  1. 不要使用 Beanshell PreProcessor,因为它会被每个线程执行。使用具有 1 个线程的单独线程组来读取值。
  2. 不要使用Beanshell Samplers来创建实际负载,如果负载或多或少会成为瓶颈。
  3. 使用 JSR223 Test Elements 和 "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 - 是 shorthand for JMeterContext
  • props - 代表 JMeter Properties,java.util.Properties 派生所有方法和字段的实例,对整个 JVM 实例是全局的。

请参阅Java上述对象的文档以了解还可以做什么,以及Beanshell vs JSR223 vs Java JMeter Scripting: The Performance-Off You've Been Waiting For!有关安装groovy脚本引擎、脚本最佳实践和 Beanshell、JSR223+ 基准测试的说明指南groovy 和 Java 代码。