我正在编写一个使用 while Controller 等待特定响应的测试。 更准确地说,我使用 jmeter 发送一条消息,然后该消息的状态为“发送”,大约 30 秒后状态更改为“已接收”。因此,使用 while Controller ,我尝试获取接收该消息需要多长时间。
- 所以我创建“State”变量并给他值“尚未设置”
- 将 while Controller 条件设置为 ${__javaScript("${State}".indexOf("Received") == -1,)}
- 然后在 while Controller 中,我向该页面添加 http 请求项,该页面在更改时应包含接收到的状态
- 在 http 请求中,我添加了正则表达式提取器,该提取器应获取所有响应文本,并将 reg 表达式设置为“(.+)”并将引用名称设置为“State”
- 在 http 请求中添加 5 秒的恒定计时器
当我执行这个测试时,它在http请求之后卡住了,该请求以绿色执行,接下来什么也没有发生,这里可能有什么问题?
更新 ---------------------------------------------------------- -----------------------
Siunčiamas=正在发送
尝试了一些不同的东西。当 Controller 值更改为 -
${__javaScript("${State}"== "Siunčiamas",)}
并将 reg 表达式提取器值转换为 -
class="label-primary label"id="parentSyncState">(Siunčiamas)<
在 Controller 之前,我给状态变量值“Siunčiamas”
现在它停留在http请求上,但我在它后面添加了调试采样器,所以它每5秒重复一次。但它应该循环,直到正则表达式提取器找不到所需的值并返回不等于“Siunčiamas”的默认值,因此当 Controller 失败时。我在这里没有得到什么吗?
最佳答案
不是循环意味着,While Controller 中的条件不满足,不返回true
.
顺便说一下,${__javaScript("${State}".indexOf("Received") == -1,)}
意味着,当State
时条件为真不包含Received
.
-
indexOf
返回-1
如果在父级(州)中找不到该字符串
第一次,它运行是因为,你设置了 State
至not set yet
,其中条件返回 true
(indexOf 返回 -1,因为“尚未设置”不包含“已接收”)
When I execute this test, it gets stuck after http request, which is executed in green and nothing happens next, what can be the problem here?
测试是否停止或仍在运行?
- 如果测试停止,您可以假设条件失败(这意味着状态包含“已接收”),因此当 Controller 停止发送请求并退出时。 while Controller 的总体执行时间给出 (
number of times http request has been sent* (http request response time + 5 seconds)
) 获取“已接收”消息所需的时间。 注意:将 While Controller 作为子级添加到事务 Controller 以获取总体执行时间。 - 如果测试仍在运行,则表明您的测试设计存在问题。预计每 5 秒发送一次 http 请求。
添加Debug Sampler使用 Reg Ex Extractor 了解 State 变量捕获了什么值。
以下是我如何理解该场景的屏幕截图。
与我们分享您的测试计划以便为您提供帮助。
关于javascript - Jmeter,而 Controller 卡在请求上并且不循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39638470/