首页 > 解决方案 > 我如何在 jmeter 中迭代 CSV 创建新线程

问题描述

我正在尝试提出 jmeter 设置,我想在其中读取具有 200000 行的整个 csv 文件,并且我想遍历每行创建新线程,因为我正在使用 JSR223 预处理器,该预处理器需要新线程来从请求正文。由于某种原因,当我使用 while 循环时,只有第一个测试通过,其余测试失败,因为 JSR223 预处理器继续读取前一个线程。如果可用,我也未检查缓存的编译脚本,但仍然没有运气。我还想补充一点,当我明确地将线程数指定为 200000 中的 100 时,我的所有 100 次测试都会通过,因为它每次都会读取新线程。下面是我设置的截图:

这失败了-

在此处输入图像描述

这通过 -

在此处输入图像描述

在此处输入图像描述

我正在使用的 JSR223 预处理器脚本:

def request = new groovy.json.JsonSlurper().parseText(sampler.getArguments().getArgument(0).getValue())
def newRequest = evaluate(request.inspect())
request.body.each { entry ->
    if (entry.getValue().equals('')) {
        newRequest.body.remove(entry.getKey())
    }
}
sampler.getArguments().removeAllArguments()
sampler.addNonEncodedArgument('', new groovy.json.JsonBuilder(newRequest).toPrettyString(), '')
sampler.setPostBodyRaw(true)

使用 while 控制器时的控制台日志

在此处输入图像描述

在此处输入图像描述

标签: multithreadingjmeterjsr223

解决方案


替换这个:

sampler.getArguments().removeAllArguments()

经过:

def arguments = new org.apache.jmeter.config.Arguments();
sampler.setArguments(arguments);

如果你想正确地学习 jmeter,这本书会对你有所帮助。


推荐阅读