我要发布以下Json数据。
{
"id": 1,
"name": "Zypher",
"price": 12.50,
"tags": [{
"tag": 1,
"tagName": "X"
},
{
"tag": 2,
"tagName": "Y"
},
{
"tag": 2,
"tagName": "Z"
}]
}
我的Jmeter测试计划如下,
- Test Plan
- Thread Group
- Http Request Defaults
- Http Cookie Manager
- Simple Controller
- CSV Data Set Config (Sheet_1)
- Http Header Manager
- Http Request (The hard coded json was provided here as body data)
每件事都很好。现在我想使用csv来参数化我的Json。
Sheet_1:
id,name,price
1,Zypher,12.50
我用这3个参数修改了json,它对我有用。现在我想参数化细节部分。我不知道该怎么做。 所有我想保持我的json像这样,
{
"id": ${id},
"name": ${name},
"price": ${price},
"tags": [
{
"tag": ${tag},
"tagName": ${tagName}
}]
}
如何从csv数据动态制作json数组tags
以获取详细信息?我希望它循环为csv文件中提供的行。
更新了csv
id,name,price,tag,tagname
1,Zypher,12.50,7|9|11,X|Y|Z
这种格式会很棒
id,name,price,tag
1,Zypher,12.50,7:X|9:Y|11:Z
标记有两个属性除以:
答案 0 :(得分:4)
您可以使用JSR223 PreProcessor和Groovy language执行此操作,例如:
鉴于您有以下CSV文件结构:
id,name,price,tag
1,Zypher,12.50,X|Y|Z
以及CSV Data Set Config次设置:
将JSR223 PreProcessor作为HTTP Request采样器的子进程添加,并将以下代码放入"脚本"面积:
import groovy.json.JsonBuilder
def json = new JsonBuilder()
def tagsValues = vars.get("tags").split("\\|")
class Tag {int tag; String tagName }
List<Tag> tagsList = new ArrayList<>()
def counter = 1
tagsValues.each {
tagsList.add(new Tag(tag: counter, tagName: it))
counter++
}
json {
id Integer.parseInt(vars.get("id"))
name vars.get("name")
price Double.parseDouble(vars.get("price"))
tags tagsList.collect { tag ->
["tag" : tag.tag,
"tagName": tag.tagName]
}
}
sampler.addNonEncodedArgument("",json.toPrettyString(),"")
sampler.setPostBodyRaw(true)
从HTTP请求采样器&#34; Body Data&#34>中删除所有硬编码数据。标签(应该是绝对空白的)
运行您的请求 - 应该通过Groovy代码动态填充JSON有效负载:
参考文献:
更新
表示CSV格式
id,name,price,tag
1,Zypher,12.50,7:X|9:Y|11:Z
替换下面的Groovy代码:
List<Tag> tagsList = new ArrayList<>()
def counter = 1
tagsValues.each {
tagsList.add(new Tag(tag: counter, tagName: it))
counter++
}
与
List<Tag> tagsList = new ArrayList<>();
tagsValues.each {
String[] tag = it.split("\\:")
tagsList.add(new Tag(tag: Integer.parseInt(tag[0]), tagName: tag[1]))
}