Jmeter JMESPath 提取并转换为数组
Jmeter JMESPath Extract and converting to an Array
您好,我可以使用 JSONPath 模拟这种情况吗?示例 我有多个 City 值,我希望所有值都提取出来并放在一个数组中。非常感谢您的回复。非常感谢。
[
{
“ID”:“主要”,
“关键”:1
},
{
“城市”:“玫瑰茄”,
“编号”:“87”,
“状态”:“IL”,
“关键”:1000
},
{
“城市”:“芝加哥”,
“编号”:“7102”,
“状态”:“IL”,
“钥匙”:110
},
{
“城市”:“皇冠点”,
“编号”:“7106”,
“状态”:“在”,
“钥匙”:110038
}
]
截图:
预期输出:
这是一种解决方案。
您可以使用 JSON Extractor or JSON JMESPath Extractor post 处理器从 JSON 响应中提取城市。
您的数据将被提取到一组变量中。
在 JSON 路径提取器正下方添加一个 JSR223 Post 处理器,并将城市分配给一个数组。您可以使用 vars.put('cities',lstCities)
与其他后续采样器共享数组
int cityCount=vars.get("cities_matchNr").toInteger()
def lstCities =[]
for(i in 1..cityCount){
lstCities.add(vars.get("cities_" + i))
}
vars.putObject("cities", lstCities)
下面将演示使用后续JSR223组件中的数组
def lstCities=vars.getObject("cities") as String[]
log.info("Number of cities ${lstCities.size()}")
for(i in 0..<lstCities.size()) {
log.info("City $i is ${lstCities[i]}")
}
另一个解决方案Groovy
在请求中添加一个JSR223 Postprocessor并添加以下代码以将城市提取到数组中。
import groovy.json.JsonSlurper
String strResponse=prev.getResponseDataAsString()
log.info("responseJSON ${strResponse}")
def jsonSlurper = new JsonSlurper()
def jsonResponse = jsonSlurper.parseText(strResponse)
def lstCities=jsonResponse.city
lstCities.removeAll([null])
log.info("Cities ${lstCities.size()}")
for(i in 0..<lstCities.size()){
log.info("City ${i.next()} is ${lstCities[i]} ")
}
添加 JSR223 PostProcessor 作为上述 returns JSON
请求的子项
将以下代码放入“脚本”区域:
vars.put('cities', new groovy.json.JsonBuilder(new groovy.json.JsonSlurper().parse(prev.getResponseData()).findResults{entry -> entry.city}).toPrettyString())
在需要时将生成的值引用为 ${cities}
演示:
更多信息:
您好,我可以使用 JSONPath 模拟这种情况吗?示例 我有多个 City 值,我希望所有值都提取出来并放在一个数组中。非常感谢您的回复。非常感谢。
[ { “ID”:“主要”, “关键”:1 }, { “城市”:“玫瑰茄”, “编号”:“87”, “状态”:“IL”, “关键”:1000 }, { “城市”:“芝加哥”, “编号”:“7102”, “状态”:“IL”, “钥匙”:110 }, { “城市”:“皇冠点”, “编号”:“7106”, “状态”:“在”, “钥匙”:110038 } ]
截图:
预期输出:
这是一种解决方案。 您可以使用 JSON Extractor or JSON JMESPath Extractor post 处理器从 JSON 响应中提取城市。
您的数据将被提取到一组变量中。
在 JSON 路径提取器正下方添加一个 JSR223 Post 处理器,并将城市分配给一个数组。您可以使用 vars.put('cities',lstCities)
int cityCount=vars.get("cities_matchNr").toInteger()
def lstCities =[]
for(i in 1..cityCount){
lstCities.add(vars.get("cities_" + i))
}
vars.putObject("cities", lstCities)
下面将演示使用后续JSR223组件中的数组
def lstCities=vars.getObject("cities") as String[]
log.info("Number of cities ${lstCities.size()}")
for(i in 0..<lstCities.size()) {
log.info("City $i is ${lstCities[i]}")
}
另一个解决方案Groovy
在请求中添加一个JSR223 Postprocessor并添加以下代码以将城市提取到数组中。
import groovy.json.JsonSlurper
String strResponse=prev.getResponseDataAsString()
log.info("responseJSON ${strResponse}")
def jsonSlurper = new JsonSlurper()
def jsonResponse = jsonSlurper.parseText(strResponse)
def lstCities=jsonResponse.city
lstCities.removeAll([null])
log.info("Cities ${lstCities.size()}")
for(i in 0..<lstCities.size()){
log.info("City ${i.next()} is ${lstCities[i]} ")
}
添加 JSR223 PostProcessor 作为上述 returns JSON
请求的子项将以下代码放入“脚本”区域:
vars.put('cities', new groovy.json.JsonBuilder(new groovy.json.JsonSlurper().parse(prev.getResponseData()).findResults{entry -> entry.city}).toPrettyString())
在需要时将生成的值引用为
${cities}
演示:
更多信息: