我如何在 jmeter 中迭代 CSV 创建新线程

How do i iterate through CSV in jmeter creating new thread

我正在尝试设置 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 控制器时的控制台日志

没有看到就无法提供全面的答案:

  1. 你的While Controller条件节
  2. CSV 文件的前 3 行
  3. 您的CSV Data Set Config设置
  4. 您的 HTTP Request 采样器参数或正文

仔细检查以下内容:

  1. 比较 While 控制器下第一个和第二个请求的 HTTP 请求采样器主体
  2. 源自 CSV 数据集配置的 JMeter 变量(您可以使用 Debug Sampler 和查看结果树侦听器组合来检查它们)
  3. Enable debug logging for the While Controller,可能是它没有按照您的预期进行,可以通过在 log4j2.xml[ 中添加下一行来完成=39=] 文件:

    <Logger name="org.apache.jmeter.control.WhileController" level="debug" />
    

替换为:

sampler.getArguments().removeAllArguments()

作者:

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

如果您想正确学习 jmeter,这篇 book 会对您有所帮助。