在 Jmeter 中,如何使用 beanshell 采样器变量设置可变数量的线程?

In Jmeter how do I set a variable number of threads using a beanshell sampler variable?

在 JMeter 中,我有一个线程组,我想使用 jmeter 变量控制运行的线程数。在线程组中,我将线程数设置为 ${numThreads}。我有一个设置线程组,它有一个带有以下内容的 bean shell 采样器(这总是在主测试线程组之前运行):

vars.put("numThreads","5");

如果我在设置线程组的用户定义变量配置元素中设置 numThreads,它将使用正确的线程数。但是我想使用我在 bean shell 采样器中定义的变量来控制它,但它不起作用。我可以看到正在创建变量,并且可以在日志中打印值,但是当我使用 bean shell 采样器时,线程组没有正确创建 5 个线程(它创建了 0 个线程)。我唯一能想到的是它们都创建了变量,但也许用户定义的配置元素将其创建为整数类型?当我调试变量的类型时,它显示为字符串,无论它是在用户定义的参数配置还是 bean shell 采样器中设置。

log.debug(vars.get("numThreads").getClass().getName()); // this prints java.lang.String for both

为什么线程组没有根据 bean shell 变量创建正确数量的线程?

好的,我明白了。看起来变量是线程特定的,属性对于整个测试是全局的。因此,当我的主线程组启动时,在设置线程组中设置变量超出了范围。现在我在 setupgroup beanshell 中设置一个 属性 并在主线程组中使用以下内容:

设置线程组 beanshell: props.put("threadCount","3");

在主线程组中,我可以使用以下命令启动正确数量的线程: ${__P(threadCount)}

仍然不知道为什么用户定义的变量配置元素起作用 - 它必须生成属性而不是变量或其他东西。