0

在我的 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.
4

1 回答 1

1

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

您有 2 个选项:

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

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

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

  2. 从您的用例来看,实际上您似乎不需要线程组。相反,您可以使用一个线程组,为之前作为线程组的每个片段设置吞吐量控制器,并在吞吐量控制器参数中表达您的分发目标。在这种情况下,您不需要计算百分比,只需指定您需要的百分比,例如:

    在此处输入图像描述

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

于 2017-09-21T15:51:15.103 回答