首页 > 解决方案 > 在 Jmeter 中动态使用 Groovy 将 csv 解析为 json

问题描述

我有.csv

name,capital,zone,code,address,city,zip,state,phone,email
Test City,false,America,us,Address line 2,New York,10002,NY,(+1) 111-111-1112,pteset@email.com

我所做的

import groovy.json.JsonBuilder

def json = new JsonBuilder()

json {
    name vars.get("name")
    capital vars.get("capital")
    zone vars.get("zone")
    code vars.get("code")
     address vars.get("address")
     city vars.get("city")
     zip vars.get("zip")
     state vars.get("state")
     phone vars.get("phone")
     email vars.get("email")
}

sampler.addNonEncodedArgument("",json.toPrettyString(),"")
sampler.setPostBodyRaw(true)

但是 csv 可以包含多个行,而不是每次都需要来自 csv 的所有行

所以,我需要一些变量,它将为循环设置一些计数器,从 csv 读取 counter=rows 并返回 JSON

尝试在这里找到解决方案,但我在 Groovy 中的菜鸟时总是遇到语法问题(

结果,它应该是 1 个请求,1 个有效负载,具有多个项目 = 来自 csv 的行

标签: jsonloopscsvgroovyjmeter

解决方案


您将无法使用 CSV 数据集配置来实现此目的,您必须以编程方式解析 CSV 文件,例如:

def rows = 2 // how many rows you need to collect from the CSV

def entries = []
1.upto(rows, { index ->
    def values = new File('/path/to/your/file.csv').readLines().get(index).split(',')
    def entry = [:]
    entry.put('name', values[0])
    entry.put('capital', values[1])
    entry.put('zone', values[2])
    entry.put('code', values[3])
    entry.put('address', values[4])
    entry.put('city', values[5])
    entry.put('zip', values[6])
    entry.put('state', values[7])
    entry.put('phone', values[8])
    entry.put('email', values[9])
    entries.add(entry)
})

def json = new groovy.json.JsonBuilder(entries)

更多信息:


推荐阅读