Jmeter中多线程组的负载分布
Load Distribution for multiple thread group in Jmeter
在我的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.
您不能在线程组定义中使用变量,因为变量是线程的局部变量,因此在线程组启动其线程后被初始化。
您有 2 个选择:
使用属性,如this解决方案中所述。您尝试进行的计算也需要修改,例如:
${__javaScript(Math.max(1\,Math.round(props.get('threads')*props.get('WeightOfGroup1')/100)))}
这里假设您同时定义了 threads
和 WeightOfGroup1
属性。另请注意,您需要将数字四舍五入为整数。为了避免以 0 个线程结束,我还采用了 1 和公式计算之间的最大值(因此它将 运行 至少一个线程)——这当然是可选的。
从您的用例来看,您实际上似乎不需要线程组。相反,您可以使用一个线程组,为每个以前是您的线程组的片段设置 Throughput Controller,并在吞吐量控制器参数中表达您的分配目标。在这种情况下,您不需要计算百分比,只需指定您需要的百分比即可,例如:
我认为这个解决方案更优雅,所以除非有任何其他原因使用多个线程组,否则我会采用它。
在我的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.
您不能在线程组定义中使用变量,因为变量是线程的局部变量,因此在线程组启动其线程后被初始化。
您有 2 个选择:
使用属性,如this解决方案中所述。您尝试进行的计算也需要修改,例如:
${__javaScript(Math.max(1\,Math.round(props.get('threads')*props.get('WeightOfGroup1')/100)))}
这里假设您同时定义了
threads
和WeightOfGroup1
属性。另请注意,您需要将数字四舍五入为整数。为了避免以 0 个线程结束,我还采用了 1 和公式计算之间的最大值(因此它将 运行 至少一个线程)——这当然是可选的。从您的用例来看,您实际上似乎不需要线程组。相反,您可以使用一个线程组,为每个以前是您的线程组的片段设置 Throughput Controller,并在吞吐量控制器参数中表达您的分配目标。在这种情况下,您不需要计算百分比,只需指定您需要的百分比即可,例如:
我认为这个解决方案更优雅,所以除非有任何其他原因使用多个线程组,否则我会采用它。