groovy - 在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
请求帮助我了解如何解决此问题。
解决方案
ids.collect{carnumber: it}
基本上是ids
。明确返回地图:ids.collect{ [carnumber: it] }
推荐阅读
- apache - 在 Visual Studio Code 中添加 .jar 文件
- ios - 我的应用程序如何以编程方式获取它的所有控制台日志?
- android - 如何正确处理拦截片段/活动的向上导航顶部后退箭头(<-),以便片段/活动仅根据条件关闭
- r - 如何将多行标题/列名称添加到 R 中的数据框
- angular - 如何使用角和角材料将步进器从一步移动到第二步
- javascript - 当输入日期字段中有值时如何使按钮启用
- identityserver4 - 身份服务器多租户,每个租户数据库的身份表
- java - 如何计算两个 timeStamp (不同天数)之间的分钟差?
- javascript - 如何仅触发一个事件“更改”或“点击”
- amazon-web-services - 我们可以从备份恢复到同一个 dynamodb 表吗