如何使用jmeter JSR223预处理器从csv文件中阅读每一行

wpx232ag  于 2022-11-01  发布在  其他
关注(0)|答案(1)|浏览(371)

我的要求是使用JMeter中的POST方法将多个JSON主体发送(一次发送所有文件主体)到API。
1.我有一个CSV文件,所有文件路径都在json_test_plan.csv文件中。在四个文件中,我都有JSON主体。
在每一行中,我都提到了一个包含JSON主体的文件路径。

D:\jmeter_tests\plan1.json
D:\jmeter_tests\plan2.json
D:\jmeter_tests\plan3.json
D:\jmeter_tests\plan4.json

1.使用Body数据创建了一个HTTP请求采样器,如下所示:{__FileToString(${JSON},,)}
1.添加了JSR 223预处理器作为HTTP请求采样器的子级,我使用它来发送JSON输入
将以下代码放入脚本区域

new File("D:/jmeter_tests/json_test_plan.csv").readLines().each { line ->
def builder = new StringBuilder()
    builder.append(new File(line).text).append(System.getProperty('line.separator'))
    sampler.getArguments().removeAllArguments()
sampler.addNonEncodedArgument('', builder.toString(), '')
sampler.setPostBodyRaw(true)
    }

1.添加了一个http头管理器,添加了content-type和application/json分别作为Name和Value字段的值
1.添加了CSV数据集配置,提及CSV数据源“D:/jmeter_tests/json_test_plan.csv”
现在的问题是,每次我运行一个jmeter测试,上面只是读取CSV文件“D:\jmeter_tests\plan4.json”的最后一行(行),并给出所需的输出。我认为代码中有一些索引问题。有人能帮我读取CSV文件中的每一行/行并进行处理吗?谢谢

yrefmtwq

yrefmtwq1#

发生这种情况是因为你对每个文件都调用了sampler.getArguments().removeAllArguments()。只要删除它,你的代码就应该开始工作了。
您还可以考虑增强它以使用Arguments

def data = new org.apache.jmeter.config.Arguments()

def builder = new StringBuilder()
new File("D:/jmeter_tests/json_test_plan.csv").readLines().each { line ->
    builder.append(new File(line).text).append(System.getProperty('line.separator'))
}

def body = new org.apache.jmeter.protocol.http.util.HTTPArgument('', builder.toString(), '', false)
body.setAlwaysEncoded(false)
data.addArgument(body)
sampler.setArguments(data)

有关JMeter中的Groovy脚本的更多信息:Apache Groovy: What Is Groovy Used For?

相关问题