我正在对我的apis进行性能测试,在尝试一些事情的时候,我发现如果我把我的采样器(http请求)放在一个总是导致为真的“if controller”中,我得到的吞吐量是一半当我使用采样器时没有控制器。为什么会这样?
if-controller中的比较只是比较随机变量是否大于某个阈值。
我的实际用例明显不同,但if-controller的这种行为正在影响我。 编辑: 这是我的if-controller配置的图像。
答案 0 :(得分:4)
在使用If Controller时,如果您没有选中“将条件解释为变量表达式”,那么您的代码将由Javascript执行,根据documentation中的警告执行情况会非常糟糕。
由于JMeter 4.0(强烈建议升级),警告会清楚地解释问题:
要解决此问题,只需使用__jexl3函数替换代码并选中“解释...”:
答案 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默认将条件解释为变量表达式,理论上应该加快速度
另外,请确保使用已解析为true
的内容或使用__groovy()
函数而非JavaScript。
即使假设如果控制器的开销,您的测试吞吐量也不会下降2倍,那么请确保您关注JMeter Best Practices并仔细检查JMeter是否有足够的空间来运行CPU和RAM。