我有一个使用 Websocket 运行的测试。 我有 2 条消息需要写入 websocket 并监听响应(附加
message
并在 EOF 返回时关闭监听器。
对于一条消息它可以正常工作,但是当我尝试使用 2 条消息运行时,它就崩溃了。
过程(>的for循环深度):
questionCounter = 0
、done = "false"
(全部工作方式为
预计)Loop Controller
(循环计数2)Counter
用于跟踪 [变量名称为 counterA
]JSR223 script
用于设置变量 questionCounter = 1
(添加此脚本作为调试和尝试其他解决方案的一部分)Write Sampler
)(在查看 Results Tree
中的结果时按预期工作 - 耶 [我正在使用步骤 3 中的循环计数器 counterA
来获取正确的问题]问题开始:
While Controller
关闭时 done = "true"
While Controller
的
counterB
Read Sampler
在 Results Tree
9A。 >>> 响应中
type
的正则表达式提取器,结果为 type_${question_counter}
9B。 >>> 响应中
target
的正则表达式提取器,结果为 target_${question_counter}
9C。 >>> 响应中
messages
的正则表达式提取器,结果为 messages_${question_counter}
[是的,我有 3 个独立的提取器,因为我不知道响应中道具的顺序]
>>
JSR223 Script
附加上面的消息并将它们保存到 props 中,但是当将这些消息保存到使用 questionCounter
或 counterA
的键时,它总是使用 1 作为步骤 4 中设置的 questionCounter
(忽略 ) questionCounter++
和 vars.put
)和counterA = 0
,即使是在第二次循环迭代中(它应该是 1)。
>>
JSR223 Script
检查目标和类型以查看“EndOfMessages”是否已发送,如果是,则在计数器 done = 'true'
时关闭[再次,所有正则表达式结果都针对 counterA
的 0 或 进行保存questionCounter
的 `1 从第一个循环开始,甚至在第二个循环中]
然后在
loop controller
之后进行一些日志记录等。
我可以从
Debug Sampler
和 View Results Tree
看到“据说”更新的 messageCounter
和 counterA
没有改变值。我在 log.info
之前和之后都有 While Controller
,对于相同的 log.info("question_counter ${vars.get("question_counter")}")
,先显示“2”,然后显示“1”。
上面遗漏了很多调试采样器和日志记录,但我可以从
Results Tree
和控制台窗口看到它没有更新。
我尝试使用手动设置的
counterA
从父循环中交换 questionsCounter
,但都没有在 While Loop
内更新。
为什么循环忽略更新的值?
提前非常感谢。
不幸的是,您的问题没有提供足够的详细信息以便被复制(至少对我来说)。我可以想到以下增强功能,也许其中之一可以帮助您继续:
您不需要任何“计数器”,控制器公开一个包含当前迭代次数的特殊变量:
它可以通过以下方式访问:
${__jm__While Controller Name Here__idx}
不要将
${something}
形式的 JMeter 函数或变量内联到 Groovy 脚本中,因为只会编译和缓存第一个值,请参阅 JSR223 Sampler 文档了解更多详细信息