Jmeter 在数组中提取 JSON 格式

Jmeter extracting JSON format inside an Array

我想寻求帮助,如何提取此示例响应中的价值 USDT。非常感谢您的回复。目前这就是我使用 JSON 路径测试器 $..currency[0] 提取我的 USDT 的方式。我想让它变得灵活而不使用数字而不是包含。有没有办法模拟这个?提前谢谢你

{
    "uid": "123-321",
    "period": "25_minutes",
    "level": "symbol",
    "values": [
        1.3211,
        1.2212
    ],
    "rank_by": "volume",
    "currency": [
        "USDT",
        "SGD"
    ],
    "measurements": [
        0.42,
        0.15
    ],
    "num_instruments": 20,
    "asset_classes": [
        "All"
    ],
    "version": "1.0.0",
    "timestamp": "2022-05-30T03:53:09"
}

我提取的示例响应:

没有关于 JSON 提取器的线索,但可以通过以下方法完成,

  1. 将 JSR223 后处理器添加为 returns 请求的子项 以上 JSON
  2. 将以下代码放入“脚本”区域

脚本块:

 def jsonResponse = new groovy.json.JsonSlurper().parse(prev.getResponseData())
    jsonResponse.each { getCurrencyArray ->
            def currencyExpected = "USDT"
              if(getCurrencyArray.getKey() == "currency"){
                        getCurrencyArray.getValue().each { curr ->
                            if (curr.equalsIgnoreCase("USDT")) {
                                vars.put("Cur", currencyExpected )
                                log.info("Cur = " + currencyExpected)
                            }
                        }
              }
    }

使用 USDT:

使用多个 USDT:

没有USDT:

如果您不确定响应中的货币顺序,您可以考虑

  1. 切换到 JSON JMESPath Extractor
  2. Sorting 数组按字母顺序排列
  3. Slicing 到 return 的数组仅最后一次匹配(USDT 将“低于”SGD

您可以使用 jsonpath-expression 检查数组中是否存在该值

$..currency[?(@ == "USDT")]