在jmeter中使用groovy生成json主体,在数组中包含数组

在jmeter中使用groovy生成json主体,在数组中包含数组,groovy,jmeter-5.0,jsr223,Groovy,Jmeter 5.0,Jsr223,我正在尝试使用csv文件中的值动态生成JSON正文。为此,我将JSR223预处理器与groovy脚本结合使用。 我希望在运行groovy脚本时生成以下格式 { "transactionId": "100", "lineItems": [{ "lineItemNo": "1", "cardInfo": { "cardNumber": "3456" } },

我正在尝试使用csv文件中的值动态生成JSON正文。为此,我将JSR223预处理器与groovy脚本结合使用。 我希望在运行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);
File csvFile=new文件(“D:\\Project-Related Docs\\Jmeter\\apache-Jmeter-5.0\\bin\\Map\u Performance\\Map\u new\u Auto\u jmx\\2Cards.csv”)
def cards=csvFile.readLines()
List cardnumber=new ArrayList()
def计数器=1
cards.eachWithIndex{line,idx->cardnummer.add(line)}
log.info(“csv的大小=“+cardnummer.size())
log.info(“文件内容=“+cardnummer[0]”)
//构建json主体
def id=new groovy.json.JsonSlurper().parseText(cardnummer.toString())
log.info(“cardnummer to string=“+cardnummer.toString())
def builder=new groovy.json.JsonBuilder()
建筑商([
transactionId:“100”,
lineItems:ids.collect{[lineItemNo:“1”,Cardinfo:ids.collect{carnumber:it}]
])
//sampler.getArguments().removeAllArguments()的
sampler.addNonEncodedArgument(“”,builder.toPrettyString(),“”)
采样器。setPostBodyRaw(真);
--CSV文件的卡号按行列出,如下所示 9255000012794606 9255000012794645


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

ids.collect{carnumber:it}
基本上是
ids
。明确返回映射:
ids.collect{[carnumber:it]}
下面的代码解决了这个问题

//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()
def count = 1

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

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

我认为您必须提供一个
csv
文件的示例,以了解如何构建json…csv文件只包含cardnumbers行,如-925500001279406925500001279445更新为返回映射,并在生成器代码中显式地进行了一些调整,从而解决了问题-builder([transactionId:“100”),lineItems:ids.collect{[lineItemNo:“1”,Cardinfo:[cardname:it]}])输出如预期的那样,我们也可以使用此解决方案