【问题标题】:While loop stops thread before EOFWhile 循环在 EOF 之前停止线程
【发布时间】:2017-04-18 20:20:01
【问题描述】:

我在 CSV/txt 文件中有 100 万条记录(只有 1 列没有标题),我正在遍历 CSV 数据集配置并将其存储为一个变量。我还添加了 while 控制器来检查文件是否结束以退出循环,并且在任何事务失败之前它也会重试 5 次。所以我添加了 5 的计数器。

问题是,这个逻辑是有效的,但仅适用于 CSV/txt 文件中的 50305 个条目,它不会持续到 EOF,不知道出了什么问题,但每次它都以同样的方式令人兴奋,它一直持续到 5035。

你能帮我循环到文件结尾吗?是否因为我使用 groovy 重置计数器而发生?

添加了截图。

【问题讨论】:

  • 为什么要使用 While 循环循环到最后。在 CSV 数据集配置中,选择在 EOF 上回收为 False 和/或在 EOF 上停止线程为真。此配置将运行到最后。请让我知道它是否有效。
  • 当 config 提供一个值时,它会一直到 EOF 并更新配置以在到达结束时结束循环。但是我添加了 while 逻辑以在失败的情况下重试相同的 HTTP 采样器 5 次。基本上,我必须读取一个文件,将输入传递给 HTTP 示例,如果采样器失败,它必须重试相同的 HTTP 请求最多 5 次,然后才能将其标记为失败。如果在第二次重试中重试成功,它也应该通过并继续前进。

标签: loops csv while-loop jmeter


【解决方案1】:

我建议稍微修改一下您的场景并使用 2 个 While 控制器,示例大纲:

  • While Controller,条件:${__javaScript("${myVar}" != "<EOF>",)}

    • CSV Data Set Config,变量名称 - myVar 在 EOF 上回收 - false,在 EOF 上停止线程 - false
    • If Controller,条件:"${myVar}" != "<EOF>"
      • 您的采样器
      • 如果是控制器,条件${JMeterThread.last_sample_ok}"=="false"
      • 当控制器,条件${__javaScript(${counter} < 4 && "${JMeterThread.last_sample_ok}"=="false",)}
        • Counter:开始1,递增1,参考名称:counter
        • 您的采样器
  • 需要在主 100 万“while”循环之后执行的任何其他采样器

参考资料:

【讨论】:

  • 我不能使用 ${JMeterThread.last_sample_ok}"=="false" 因为 HTTP 请求总是提供 200,因为它只生成 cookie id。在我的情况下,我必须传递一个 cookie id 和在响应头中,我应该收到相同的 cookie id。所以我在 while 循环中将条件修改为 ${__javaScript(("${myvar}" != "${myvar1}") && ${counter3}
猜你喜欢
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多