首页 > 解决方案 > 是否可以读取与 jmeter 中的正则表达式匹配的 JSON JMESPath 提取器形式的所有值?

问题描述

我有以下作为 GET 调用的响应,我需要在另一个 POST 调用的有效负载中使用 100、101、102 等值。

回复:

{"id":12,"records":[{"id":100,"documentId":1, "pageNo":1},{"id":101,"documentId":2, "pageNo":1},{"id":102,"documentId":3, "pageNo":1}]}

稍后使用所需的有效载荷:

{"id":12,"records":[100,101,102]}

像 100、101、102 这样的值会随着数据的增加而进一步增加,我需要所有这些值。我使用这个 records[*].id 作为正则表达式。如果我将匹配数值设置为 1,它只返回一个值。但我需要数组形式的所有值。我该怎么做?我在 JMeter 中使用 JSON JMESpath 提取器。

标签: jmeter

解决方案


我不认为你可以使用 JSON JMESPath Extractor 来实现它,出于某种原因,JMeter 开发人员决定不坚持JMESPath 语言规范,因此查询records[*].id返回 3 个单独的JMeter 变量而不是 JSON 数组

这里应该是这样的

在此处输入图像描述

这是 JMeter 返回的内容:

在此处输入图像描述

所以我建议使用JSR223 PostProcessor并在 Groovy 中解析响应/创建下一个请求有效负载。

示例代码:

def response = new groovy.json.JsonSlurper().parse(prev.getResponseData())

def request = [:]
request.put('id', response.id)
request.put('records', response.records.id.collect())

vars.put('payload', new groovy.json.JsonBuilder(request).toPrettyString())

您应该能够根据需要引用生成的请求数据${request}

更多信息:


推荐阅读