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]} ")
}
  1. 添加 JSR223 PostProcessor 作为上述 returns JSON

    请求的子项
  2. 将以下代码放入“脚本”区域:

    vars.put('cities', new groovy.json.JsonBuilder(new groovy.json.JsonSlurper().parse(prev.getResponseData()).findResults{entry -> entry.city}).toPrettyString())
    
  3. 在需要时将生成的值引用为 ${cities}

演示:

更多信息: