Jmeter:无法从嵌套数组中提取值

问题描述 投票:0回答:1

我正在尝试在 Jmeter 上自动化负载测试,以便能够安排它们并让它们在特定时间运行。我对队列和兔子风景没有任何权力,我只能发送和检索。

我可以安排将消息发送到我们自己的rabbitmq队列上。然而,我需要能够检查他们是否都安全到达那里。因此,我从发送的消息中提取了所有 messageId 值,并且需要查看队列是否包含它们。

我设法从队列中获取最后一条(我需要的数量)消息作为整个文本,它看起来像这样:

[{
        "payload_bytes": 702,
        "payload": "{\"receiver\":\"randomnumbers\",\"expiration_ts\":\"2024-07-03T15:13:45.812+02:00\",\"la_id\":\"miao\",\"service_name\":\"miao2\",\"la_message_code\":\"05c77901-fb4b-4b9a-8dfc-be2af1d0e2f0\",\"wa_account\":\"393511491882\",\"metadata\":{\"mkt\/servizio\":\"link:it\",\"ubm\/acceptingDate\":\"2024-07-02T15:13:45.772+02:00\",\"ubm\/ubmMessageSid\":\"05c77901-fb4b-4b9a-8dfc-be2af1d0e2f0\",\"miao5\":\"miao3\",\"la\/category\":\"Service\",\"la\/subCli\":\"miao6\",\"mkt\/ambiente\":\"Test\",\"mkt\/groupServiceSid\":\"miao7\",\"afc\/ambiente\":\"Test\",\"mkt\/service_name\":\"miao2\"},\"template_foreign_id\":\"miao4\",\"template_params\":[\"1\",\"text2\",\"text3\",\"text4\",\"text5\",\"text6\",\"text7\",\"text8\",\"text9\",\"text10\"]}",
        "payload_encoding": "string",
        "exchange": "",
        "routing_key": "miaoqueue",
        "message_count": 522,
        "redelivered": true,
        "properties": {
            "headers": {
                "x-delay": 0
            },
            "content_type": "application\/octet-stream",
            "priority": 0,
            "delivery_mode": 2
        }
    },
    {
        "payload_bytes": 702,
        "payload": "{\"receiver\":\"randomnumbers\",\"expiration_ts\":\"2024-07-03T15:13:45.837+02:00\",\"la_id\":\"miao\",\"service_name\":\"miao2\",\"la_message_code\":\"bdc77f92-66d8-45c7-8114-7cde780421d6\",\"wa_account\":\"393511491882\",\"metadata\":{\"mkt\/servizio\":\"miao4\",\"ubm\/acceptingDate\":\"2024-07-02T15:13:45.767+02:00\",\"ubm\/ubmMessageSid\":\"bdc77f92-66d8-45c7-8114-7cde780421d6\",\"miao5\":\"miao3\",\"la\/category\":\"Service\",\"la\/subCli\":\"miao6\",\"mkt\/ambiente\":\"Test\",\"mkt\/groupServiceSid\":\"miao7\",\"afc\/ambiente\":\"Test\",\"mkt\/service_name\":\"miao2\"},\"template_foreign_id\":\"miao4\",\"template_params\":[\"1\",\"text2\",\"text3\",\"text4\",\"text5\",\"text6\",\"text7\",\"text8\",\"text9\",\"text10\"]}",
        "payload_encoding": "string",
        "exchange": "",
        "routing_key": "miaoqueue",
        "message_count": 521,
        "redelivered": true,
        "properties": {
            "headers": {
                "x-delay": 0
            },
            "content_type": "application\/octet-stream",
            "priority": 0,
            "delivery_mode": 2
        }
    }]

但是,它运行了很多次。我还设法通过 json 提取器将其分割成单个有效负载项:

$..payload

然后我将所有这些都列出来并使用 JSR223 进行编号:


int payloadCount=vars.get("payload_matchNr").toInteger()
def lstPayload =[]

for(i in 1..payloadCount){
    lstPayload.add(vars.get("payload_" + i))
}
vars.putObject("payload", lstPayload)

我的问题是我无法从这个东西中获取所有

"la_message_code"
条目(这就是这里调用 messageId 值的方式)。 一旦我把它们全部拿出来,我希望能够做类似的事情: 对于每个 la_message_code,尝试查看它是否包含我之前提取的任何 messageId。

arrays json regex jmeter rabbitmq
1个回答
0
投票

Groovy 具有内置 JSON 支持,因此您可以一次性完成所有操作:

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

payloads.eachWithIndex { payload, index ->
    vars.put('la_message_code_' + (index + 1), (new groovy.json.JsonSlurper().parseText(payload).la_message_code))
}

有关 JMeter 中 Groovy 脚本编写的更多信息:Apache Groovy:Groovy 的用途是什么?

© www.soinside.com 2019 - 2024. All rights reserved.