JMeter-生成对象并添加到数组

JMeter-生成对象并添加到数组,jmeter,beanshell,Jmeter,Beanshell,因此,我想通过发送高负载的消息来对websocket通信和服务器进行压力测试。问题是这些消息是以一种特殊的方式格式化的,我正在努力生成正确的数据 因此,每次我从客户端发送消息时,发送到服务器的消息看起来有点像这样: 42["tickets","ticket_message", {"ticket":{ "body":[ {"received":"2018-05-17T11:28:51.000Z","fromName":"Jesper Pedersen","body":"test\n"},

因此,我想通过发送高负载的消息来对websocket通信和服务器进行压力测试。问题是这些消息是以一种特殊的方式格式化的,我正在努力生成正确的数据

因此,每次我从客户端发送消息时,发送到服务器的消息看起来有点像这样:

42["tickets","ticket_message",
{"ticket":{
 "body":[
  {"received":"2018-05-17T11:28:51.000Z","fromName":"Jesper Pedersen","body":"test\n"},
  {"received":"2018-05-17T13:30:53+02:00","body":"Yo","fromName":"Futurum Digital"}
 ] 
}]
 "body":[
  {"received":"2018-05-17T11:28:51.000Z","fromName":"Jesper Pedersen","body":"test\n"},
  {"received":"2018-05-17T13:30:53+02:00","body":"Yo","fromName":"Futurum Digital"},
  {"received":"2018-05-17T13:38:43+02:00","body":"Yo again","fromName":"Futurum Digital"}
 ] 
每次创建新消息时,消息都会添加到正文中。因此,如果我发送一条新消息,身体将如下所示:

42["tickets","ticket_message",
{"ticket":{
 "body":[
  {"received":"2018-05-17T11:28:51.000Z","fromName":"Jesper Pedersen","body":"test\n"},
  {"received":"2018-05-17T13:30:53+02:00","body":"Yo","fromName":"Futurum Digital"}
 ] 
}]
 "body":[
  {"received":"2018-05-17T11:28:51.000Z","fromName":"Jesper Pedersen","body":"test\n"},
  {"received":"2018-05-17T13:30:53+02:00","body":"Yo","fromName":"Futurum Digital"},
  {"received":"2018-05-17T13:38:43+02:00","body":"Yo again","fromName":"Futurum Digital"}
 ] 
我想知道如何通过某种方式使用Beanshells预处理器,用JMeter循环这个过程。也就是说,我希望每个线程循环都向该数组体添加一条新消息。我需要一些数组列表来保存每个循环中的数据,并添加一条新消息,如下所示:

{"received":"new date","body":"new message again","fromName":"Futurum Digital"}
在每个线程循环上

我有一个CSV文件,其中包含我正在设置为可变消息的消息:

message1,
message2
我想我需要这样的函数,不正确的Java语法,翻译成javascript:

var messages = ${SOME_GLOBAL_MESSAGES_ARRAY}
var message = {"received": new Date().toString(),"body":"${MESSAGE}", "fromName":"Futurum Digital"}

messages.push(message)
vars.put('messageList', messages);
但我没有Java和Beanshell方面的经验,也不知道如何做到这一点。我真的很感激任何帮助

假设您的body值为

{
  "body": [
    {
      "received": "2018-05-17T11:28:51.000Z",
      "fromName": "Jesper Pedersen",
      "body": "test\n"
    }
  ]
}
您可以添加另一个带有a和代码的条目,如:

def json = new  groovy.json.JsonSlurper().parseText(vars.get('body'))
def body = json.body
def newEntry = new groovy.json.internal.LazyMap()
newEntry.put('received', '2018-05-17T13:30:53+02:00')
newEntry.put('fromName', 'foo')
newEntry.put('body', 'bar')
body.add(newEntry)
vars.put('body', new groovy.json.JsonBuilder(json).toPrettyString())
演示:

更多信息:


我应该在哪里设置这个JMeter变量?在你的情况下,数组会保留插入的对象还是在每个循环上重置?你可以在任何地方设置初始变量,它可以使用即从响应中提取,或者你可以通过硬编码它的值。上述代码在每次调用时都会添加一个条目,不会进行重置。@Dmitri\T感谢您的帮助。如何仅从主体获取和设置数组值?