Генерация json тела с использованием groovy в jmeter, имеющего массив внутри массива - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь сгенерировать тело JSON динамически, используя значения в CSV-файле. Для этого я использую препроцессор JSR223 со скриптом groovy. Я ожидаю, что приведенный ниже формат будет сгенерирован при запуске groovy script

    {
    "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
            ]
        }
    ]
}

Script для генерации json body

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 FILE номера карт перечислены по строкам, как показано ниже

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

ids.collect{carnumber: it} в основном ids. Откровенно о возвращении карты: ids.collect{ [carnumber: it] }

0 голосов
/ 02 апреля 2020

Ниже кода решена проблема

//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);
...