【问题标题】:How to make json array from csv data set config using groovy script in jmeter如何使用 jmeter 中的 groovy 脚本从 csv 数据集配置中创建 json 数组
【发布时间】:2017-07-29 06:50:16
【问题描述】:

我有一个包含多个记录(逗号分隔)的 Csv 文件,我需要一个 groovy 脚本,它可以从 csv 获取所有数据并创建一个 json 数组并在 jmeter 中发送一个 POST 请求。下面是我的代码。但它只获取一条记录

import groovy.json.*
import groovy.json.JsonBuilder

def jsonBuilder = new groovy.json.JsonBuilder()
jsonBuilder {
    id Integer.parseInt(vars.get("id"))
    name vars.get("first_name")
    last_name vars.get("last_name")
    email vars.get("email")
    institute_id Integer.parseInt(vars.get("institute_id"))
    category_id Integer.parseInt(vars.get("category_id"))
    value Boolean.parseBoolean(vars.get("value"))
}

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

【问题讨论】:

  • 能否请您也发布变量vars 是什么?
  • vars(JMeter 变量)是最常用的组件。它是 org.apache.jmeter.threads.JMeterVariables 类的一个实例,提供对当前变量的读/写访问,能够枚举/更改现有变量、创建新变量以及获取嵌套属性。
  • 想要的 json 长什么样?
  • { "_token": "sometokentext", "candidate": [{ "id": 1, "first_name": "lorem ipsum", "last_name": "lorem ipsum", "email" :“loremipsum@loremipsum.com”,“institute_id”:loremipsum,“category_id”:loremipsum,“value”:false }],“test_id”:“${id}”,“selectedDate”:“${date}” }
  • 我完全不明白你为什么需要 groovy 脚本?为什么不将 JSON(正如您在上面的评论中发布的那样)直接放在 HTTP 采样器中,即 HTTP 采样器正文 { "_token": "sometokentext", "candidate": [{ "id": 1, "first_name": "${first_name}", "last_name": "${last_name}", "email": "${email}", "institute_id": ${institute_id}, "category_id": ${category_id}, "value": ${value} }], "test_id": "${id}", "selectedDate": "${date}" }

标签: json csv groovy jmeter


【解决方案1】:

假设您有以下 CSV 文件:

id,first_name,last_name,email,institute_id,category_id,value
1,john,doe,johndoe@example.com,1,1,true
2,jane,doe,janedoe@example.com,2,2,false

您可以使用以下 Groovy 代码将其转换为 JSON Array

    import groovy.json.JsonOutput

    def lines = new File('test.csv').readLines()

    def keys = lines[0].split(',')
    def rows = lines[1..-1].collect { line ->
        def i = 0, vals = line.split(',')
        keys.inject([:]) { map, key -> map << ["$key": vals[i++]] }
    }

    log.info(JsonOutput.prettyPrint(JsonOutput.toJson(rows)))

演示:

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多