Jmeter中多线程组的负载分布

Jmeter中多线程组的负载分布,jmeter,jmeter-3.2,Jmeter,Jmeter 3.2,在我的JMeter3.0测试计划中,我有多个线程组。现在我想 按百分比在他们之间分配用户 我在用户定义变量中声明了变量,然后在线程组中使用了以下语句 ${__BeanShell(${__evalVar(threads)}*${__evalVar(WeightOfGroup1)}/100)} 但我在这样做时遇到了以下异常 不能在线程组定义中使用变量,因为变量是线程的本地变量,因此在线程组启动其线程后初始化 您有两种选择: 使用解决方案中描述的属性。您尝试进行的计算也需要修改,例如: ${__ja

在我的JMeter3.0测试计划中,我有多个线程组。现在我想 按百分比在他们之间分配用户

我在用户定义变量中声明了变量,然后在线程组中使用了以下语句

${__BeanShell(${__evalVar(threads)}*${__evalVar(WeightOfGroup1)}/100)}
但我在这样做时遇到了以下异常


不能在线程组定义中使用变量,因为变量是线程的本地变量,因此在线程组启动其线程后初始化

您有两种选择:

  • 使用解决方案中描述的属性。您尝试进行的计算也需要修改,例如:

    ${__javaScript(Math.max(1\,Math.round(props.get('threads')*props.get('WeightOfGroup1')/100)))} ${uuuuJavaScript(Math.max(1\,Math.round(props.get('threads')*props.get('WeightOfGroup1')/100))) 这里假设您同时定义了组1的
    线程
    权重属性。还要注意,您需要将数字舍入为整数。为了避免以0个线程结束,我还采用了1和公式计算之间的最大值(因此它将至少运行一个线程)-这当然是可选的

  • 从您的用例来看,实际上看起来您不需要线程组。相反,您可以使用一个线程组,为以前是线程组的每个片段指定一个线程组,并在吞吐量控制器参数中表示您的分布目标。在这种情况下,您不需要计算百分比,只需指定您需要的百分比,例如:

    我认为这个解决方案更优雅,所以除非有任何其他理由使用多线程组,否则我会选择这个解决方案

  • ${__javaScript(Math.max(1\,Math.round(props.get('threads')*props.get('WeightOfGroup1')/100)))}