首页 > 解决方案 > 在jmeter中使用groovy生成json正文,数组中有数组

问题描述

我正在尝试使用 csv 文件中的值动态生成 JSON 正文。为此,我正在使用带有 groovy 脚本的 JSR223 PreProcessor。我希望在运行 groovy 脚本时生成以下格式

    {
    "transactionId": "100",
    "lineItems": [{
            "lineItemNo": "1",
            "cardInfo": {
                "cardNumber": "3456"
            }
        },
        {
            "lineItemNo": "2",
            "cardInfo": {
                "cardNumber": "45698"
            }
        }
    ]
}

但是当我执行脚本时,我得到了以下格式

POST data:
{
    "transactionId": "100",
    "lineItems": [
        {
            "lineItemNo": "1",
            "Cardinfo": [
                9255000012794606,
                9255000012794645
            ]
        },
        {
            "lineItemNo": "1",
            "Cardinfo": [
                9255000012794606,
                9255000012794645
            ]
        }
    ]
}

生成json主体的脚本

File csvFile = new File("D:\\Project Related Docs\\Jmeter\\apache-jmeter-5.0\\bin\\Map_Performance\\Map_New_Auto_jmx\\2Cards.csv")
def cards = csvFile.readLines()
List<String> cardnumbmer = new ArrayList<>()
def counter = 1
cards.eachWithIndex{line,idx->cardnumbmer.add(line)}
log.info("size of csv = "+cardnumbmer.size())
log.info("File conents = "+cardnumbmer[0])

//build the json body
def ids = new groovy.json.JsonSlurper().parseText(cardnumbmer.toString())
log.info("cardnumbmer to string = "+cardnumbmer.toString())
def builder = new groovy.json.JsonBuilder()

builder([
    transactionId:"100",
    lineItems:ids.collect{[lineItemNo:"1",Cardinfo: ids.collect{carnumber: it}]}
    ])

//sampler.getArguments().removeAllArguments()
sampler.addNonEncodedArgument('',builder.toPrettyString(),'')
sampler.setPostBodyRaw(true);

--CSV 文件有按行列出的卡号,如下所示 9255000012794606 9255000012794645

请求帮助我了解如何解决此问题。

标签: groovyjmeter-5.0jsr223

解决方案


ids.collect{carnumber: it}基本上是ids。明确返回地图:ids.collect{ [carnumber: it] }


推荐阅读