jmeter中的“if controller”是否会降低吞吐量?

时间:2018-02-13 08:05:50

标签: jmeter performance-testing

我正在对我的apis进行性能测试,在尝试一些事情的时候,我发现如果我把我的采样器(http请求)放在一个总是导致为真的“if controller”中,我得到的吞吐量是一半当我使用采样器时没有控制器。为什么会这样?

if-controller中的比较只是比较随机变量是否大于某个阈值。

我的实际用例明显不同,但if-controller的这种行为正在影响我。 编辑: 这是我的if-controller配置的图像。 enter image description here

3 个答案:

答案 0 :(得分:4)

在使用If Controller时,如果您没有选中“将条件解释为变量表达式”,那么您的代码将由Javascript执行,根据documentation中的警告执行情况会非常糟糕。

由于JMeter 4.0(强烈建议升级),警告会清楚地解释问题:

Warning

要解决此问题,只需使用__jexl3函数替换代码并选中“解释...”:

enter image description here

答案 1 :(得分:3)

您应该检查If Controller引用它是否具有使用If控制器而不影响性能的良好示例。

  

将条件解释为变量表达式?如果选择此选项,则条件必须是计算结果为“true”的表达式(忽略大小写)。例如,$ {FOUND}或$ {__ jexl3($ {VAR}> 100)}

在您的情况下,您应该检查Interpret Condition as Variable Expression?复选框并使用以下条件(不带引号):

${__jexl3(${breachPercent} > 10)}

您也可以将__jexl3替换为__groovy函数

  

检查此项并在条件中使用__jexl3或__groovy函数建议演出

答案 2 :(得分:1)

任何测试元素都会增加开销,因此使用If Controller的测试计划将消耗更多资源,或者在资源不足的情况下执行速度更慢。

关于If Controller,确保每次使用__groovy()而不是默认的JavaScript时,如果调用Controller,JMeter会使用JavaScript解释器评估条件,这种情况很慢。

因为JMeter 4.0如果Controller默认将条件解释为变量表达式,理论上应该加快速度

JMeter 4.0 If Controller

另外,请确保使用已解析为true的内容或使用__groovy()函数而非JavaScript。

即使假设如果控制器的开销,您的测试吞吐量也不会下降2倍,那么请确保您关注JMeter Best Practices并仔细检查JMeter是否有足够的空间来运行CPU和RAM。