Jmeter 从响应中提取值并发送到其他请求

Jmeter extracting values from response and sending to other requests

我有下面的 JSON 回复:

"books": [
{
   "name" : "test1",
   "id" : "T01"
},
{
   "name" : "test2",
   "id" : "T02"
},
{
   "name" : "test3",
   "id" : "T03"
},
]

我正在提取所有相应的 ID 并将其作为正文发送给另一个请求。 其他请求将它作为一个字符串数组,但是当我提取它时,它显示为整数:

Currently it shows:  ids_ALL = [T01, T02, T03]
and I have to pass it like: ids_ALL = ["T01", "T02", "T03"]

Note: I am suffixing _ALL to get all ids.

因为它没有将数组作为字符串传递,所以出现错误。

是否可以提取它并将其放入字符串数组或使用post-处理器然后转换数组并发送到其他请求的方式。

您可以使用 JSON Extractor or JSON JMESPath Extractor 从响应中提取所有 ID。

将 JSR223 Post 处理器放在 JSON 路径提取器的正下方以创建字符串列表 (ids)

def idCount=vars.get("booksIds_matchNr").toInteger()
def lstIds=[]

for(i in 1..idCount){
    String currentId=vars.get("booksIds_" + i)
    lstIds.add("\""+ currentId + "\"" )
    //lstIds.add("${currentId}" )
    
}

vars.putObject("lstIds",lstIds)

您可以通过 vars.getObject("lstIds")

访问列表

可以在视图结果树中看到字符串列表。

另一个快速解决方案

在 JSON 提取器下方添加一个 JSR223 Post 处理器以创建具有可用值的字符串。

String  booksIds_ALL=vars.get("booksIds_ALL")
def lstIds = "\"" + booksIds_ALL.replace(",", "\",\"") + "\""
vars.putObject("lstIds",lstIds)

这一行将提取所有 ID 并生成您要查找的 JSON Array

vars.put('payload', (new groovy.json.JsonBuilder(new groovy.json.JsonSlurper().parse(prev.getResponseData()).books.id.collect()).toPrettyString()))

不需要其他提取器,您可以稍后在需要的地方将生成的数组引用为 ${payload}

在金牛座可以放入JSR223 Block

更多信息: