Jmeter中多线程组的负载分配

时间:2017-09-20 13:59:08

标签: jmeter jmeter-3.2

在我的Jmeter 3.0测试计划中,我有多个线程组。现在我想 根据百分比在其中分配用户。

我已在用户定义的变量中声明了变量,然后在线程组

中使用了以下语句
${__BeanShell(${__evalVar(threads)}*${__evalVar(WeightOfGroup1)}/100)}

但是这样做时会出现以下异常

2017/09/20 19:25:39 ERROR - jmeter.util.BeanShellInterpreter: Error invoking bsh method: eval In file: inline evaluation of: ``**ERROR - see log file*****ERROR - see log file**/100;'' Encountered "*" at line 1, column 1.

2017/09/20 19:25:39 WARN  - jmeter.functions.BeanShell: Error running BSH script org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval In file: inline evaluation of: ``**ERROR - see log file*****ERROR - see log file**/100;'' Encountered "*" at line 1, column 1.

1 个答案:

答案 0 :(得分:1)

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

您有两个选择:

  1. 使用属性,如this解决方案中所述。您正在尝试进行的计算也需要进行修改,例如:

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

    此处假设您已定义threadsWeightOfGroup1属性。另请注意,您需要将数字四舍五入为整数。为了避免以0个线程结束,我还取1和公式计算之间的最大值(因此它将运行至少一个线程) - 当然这是可选的。

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

    enter image description here

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