Est*_*sty 2 csv json jmeter load-testing
我要发布以下Json数据。
{
"id": 1,
"name": "Zypher",
"price": 12.50,
"tags": [{
"tag": 1,
"tagName": "X"
},
{
"tag": 2,
"tagName": "Y"
},
{
"tag": 2,
"tagName": "Z"
}]
}
Run Code Online (Sandbox Code Playgroud)
我的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)
Run Code Online (Sandbox Code Playgroud)
一切正常。现在,我想使用csv参数化我的Json。
Sheet_1:
id,name,price
1,Zypher,12.50
Run Code Online (Sandbox Code Playgroud)
我用这3个参数修改了json及其对我有用。现在,我想对细节部分进行参数化。我不知道该怎么做。我想要保持我的json这样的一切,
{
"id": ${id},
"name": ${name},
"price": ${price},
"tags": [
{
"tag": ${tag},
"tagName": ${tagName}
}]
}
Run Code Online (Sandbox Code Playgroud)
我如何动态地tags从csv数据中为细节部分创建json数组?我希望将其循环为csv文件中提供的行。
更新的csv
id,name,price,tag,tagname
1,Zypher,12.50,7|9|11,X|Y|Z
Run Code Online (Sandbox Code Playgroud)
这种格式会很棒
id,name,price,tag
1,Zypher,12.50,7:X|9:Y|11:Z
Run Code Online (Sandbox Code Playgroud)
标签具有两个属性,除以 :
您可以使用JSR223 PreProcessor和Groovy语言(例如:
假设您具有以下CSV文件结构:
id,name,price,tag
1,Zypher,12.50,X|Y|Z
Run Code Online (Sandbox Code Playgroud)以及以下CSV数据集配置设置:
将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)
Run Code Online (Sandbox Code Playgroud)从HTTP请求采样器的“主体数据”标签中删除所有硬编码的数据(该数据应绝对为空白)
运行您的请求-JSON有效负载应由Groovy代码动态填充:
参考文献:
更新:
CSV格式
id,name,price,tag
1,Zypher,12.50,7:X|9:Y|11:Z
Run Code Online (Sandbox Code Playgroud)
替换下面的Groovy代码:
List<Tag> tagsList = new ArrayList<>()
def counter = 1
tagsValues.each {
tagsList.add(new Tag(tag: counter, tagName: it))
counter++
}
Run Code Online (Sandbox Code Playgroud)
与
List<Tag> tagsList = new ArrayList<>();
tagsValues.each {
String[] tag = it.split("\\:")
tagsList.add(new Tag(tag: Integer.parseInt(tag[0]), tagName: tag[1]))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2383 次 |
| 最近记录: |