使用正则表达式提取器在jmeter中使用应用条件提取值

使用正则表达式提取器在jmeter中使用应用条件提取值,jmeter,Jmeter,我想提取昵称为Mack Dack的每条短信。如何使用regularExpression extractor实现这一点 {"messages":[{"from":{"nickname":"Mack Dack","participantId":2,"type":"Agent"},"index":2,"type":"

我想提取昵称为Mack Dack的每条短信。如何使用regularExpression extractor实现这一点

{"messages":[{"from":{"nickname":"Mack Dack","participantId":2,"type":"Agent"},"index":2,"type":"ParticipantJoined","utcTime":1600262148000},{"from":{"nickname":"Mack Dack","participantId":2,"type":"Agent"},"index":4,"text":"Starting the bot: ToBi","type":"Message","utcTime":1600262151000},{"from":{"nickname":"Sonaltest Garg","participantId":1,"type":"Client"},"index":5,"text":"Starting the bot: ToBi","type":"Message","utcTime":1600262161000},{"from":{"nickname":"Mack Dack","participantId":2,"type":"Agent"},"index":7,"text":"Welcome! I am Watson. How can I help?","type":"Message","utcTime":1600262163000},{"from":{"nickname":"Sonaltest Garg","participantId":1,"type":"Client"},"index":8,"text":"Welcome! I am Watson. How can I help?","type":"Message","utcTime":1600262174000}],"chatEnded":false,"statusCode":0,"alias":"118","secureKey":"a20dfd835cd8d2199017","userId":"00765F620FFE00A2","chatId":"000BEaFP3FBS003W","nextPosition":9}

我的目的是只选择那些来自mack dack的文本消息,并将它们与我的本地json文件进行比较(如果两条消息相同),然后通过Sonaltest Garg发送相同的消息,使用正则表达式进行解析不是最好的主意,通常情况下,您应该使用as,但在特定情况下,当涉及到JSON数组时,您将无法获得as的好处,因为不可能使用子对象作为过滤器查询父属性

因此,我建议使用和以下Groovy代码:

def messages = com.jayway.jsonpath.JsonPath.read(prev.getResponseDataAsString(), '$..[?(@.type == "Message")]')
messages.findAll { message ->
    message.from.nickname == 'Mack Dack'
}.eachWithIndex { message, index ->
    vars.put('message_' + (index + 1), message.text)
}
因此,您将获得以下结果:

  • message_1=启动bot:ToBi
  • message_2=欢迎!我是华生。有什么可以帮忙的吗?

查看文章,了解这些
prev
vars
速记的含义

使用正则表达式进行解析并不是最好的方法,通常情况下,您应该使用as,但在特定情况下,当涉及到JSON数组时,您将无法获得as的好处,因为不可能使用子对象作为过滤器查询父属性

因此,我建议使用和以下Groovy代码:

def messages = com.jayway.jsonpath.JsonPath.read(prev.getResponseDataAsString(), '$..[?(@.type == "Message")]')
messages.findAll { message ->
    message.from.nickname == 'Mack Dack'
}.eachWithIndex { message, index ->
    vars.put('message_' + (index + 1), message.text)
}
因此,您将获得以下结果:

  • message_1=启动bot:ToBi
  • message_2=欢迎!我是华生。有什么可以帮忙的吗?

查看文章,了解这些
prev
vars
缩写的含义

如何将此结果存储在数组中,以便使用http请求采样器传递消息如何将此结果存储在数组中,以便使用http请求采样器传递消息