我正在尝试在 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。
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 的用途是什么?