【问题标题】:While Controller is not looping all the values in the array from Regex( -1 ) results虽然 Controller 没有从 Regex( -1 ) 结果中循环数组中的所有值
【发布时间】:2021-04-22 12:17:42
【问题描述】:

我有这样的要求,比如我需要遍历从匹配 No -1 的正则表达式捕获的所有值

ThreadGroup
 ---Req1
 ---Req2
 ---RegEx: with Match No. -1 (Debug Sampler shows match count : **18** )
 ---JSR223 Sampler ( Setting the counter value to 1 --**vars.put("counter1","1");**)
 ---While Controller ( **${__javaScript(parseInt(vars.get("counter1"))<=(${Task_matchNr}),)}** )
      ----Http req inside While controller 
      ----JSR223 Sampler(Increasing the counter value by 1 everytime till Task_matchNr --**counter = counter+1; vars.put("counter1",Integer.toString(counter));**

每次它会正确执行到第 11 个值,然后再次从第一个值开始执行而不退出循环

有人可以帮忙吗。

【问题讨论】:

    标签: while-loop jmeter counter performance-testing


    【解决方案1】:
    1. 您不需要计数器,因为 While Controller 通过 ${__jm__While Controller__idx} 公开当前迭代(因为 JMeter 5.0

    2. 您正在将整数与字符串进行比较,您应该执行parseInt("${Task_matchNr}") `

      之类的操作
    3. 最好使用性能比 JavaScript 更高的函数,例如__jexl3(),相关语法如下:

      ${__jexl3("${Task_matchNr}" != "${__jm__While Controller__idx}",)}
      
    4. 改用ForEach Controller 会不会更方便?

    【讨论】:

    • 感谢@Dmitri,正如我所建议的那样,我现在已将我的 while 控制器更改为 ForEach,但发生的事情是我有 Taskid 和 dbid(两者都将获得相同的匹配计数)来迭代 ForEach 控制器,我已经放置ForEach 中的 Taskid 和计数器内部的 dbid - 问题是由于 dbid 和 taskid 不匹配,一些请求失败(500 个请求中只有 0.6% 失败)请您帮忙
    • 你能帮忙吗?
    猜你喜欢
    • 1970-01-01
    • 2011-01-19
    • 2021-08-09
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多