JUnit 不会退出在 JMeter 中配置的循环

JUnit wont quit Loop configured in JMeter

我编写了一个包含 While-Controller 的 Jmeter 测试。测试看起来有点像这样:

> Testlan
>> VARS
>> Thread
>>> HTTP Request
>>> Transaction Controller
>>>> User Parameters
>>>> HTTP Request
>> Result Tree
>> Test Fragment
>>> Transaction Controller
>>>> Init Loop Beanshell
>>>> Loop with Condition
>>>>> BeanShell Assertion

在“Init Loop Beanshell”中,我这样做:vars.put("MyVar","okay"); 所以我的 While-Condition 看起来有点像这样:${__javaScript("${MyVar}"!="stop")} 在我的断言中,有一点我这样做:vars.put("MyVar", "stop");

奇怪的是,在 JMeter 中它工作得很好,当条件为假时循环退出。在 JUnit 中,它只是一个无限循环。我已经检查了 JUnit 日志中的 vars 并且 MyVar 是“停止”但它只是没有退出循环。 日志说:Condition value: false

我已经浪费了很多时间来弄清楚为什么这行不通。我只是希望当我从 JUnit 调用它时测试退出循环,就像我从 JMeter 调用它时一样。

我认为你的语法不正确,你应该更改这一行:

${__javaScript(${"MyVar"}!="stop")}

给这个:

${__javaScript("${MyVar}"!="stop")}

另外从性能的角度来看,最好使用__jexl3() or __groovy()函数

关于 Beanshell - 使用它是某种形式的性能反模式,since JMeter 3.1 you should be using JSR223 Test Elements and Groovy language for scripting so it worth considering migrating to JSR223 Assertion

所以,如果有人关心,我用变通办法解决了它。 所有这些 ${__javaScript/groovy/...(CONDITION)} 都不起作用,我仍然不知道为什么。

但是在 jMeter 和 jUnit 中起作用的是在 ${MyVar} 上设置 While-Condition,用 vars.put("MyVar","true"); 初始化它,并在 vars.put("MyVar", "false");[的断言上“清理”它