JMeter - 生成对象并添加到数组
JMeter - Generate objects and add to array
所以我想通过发送大量消息来对我的 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"}
]
我想知道如何使用 JMeter 循环这个过程(我想通过某种方式使用 Beanshells 预处理器)。也就是说,我希望每个线程循环都将新消息添加到该数组主体中。我需要一些数组列表来保存每个循环中的数据,并添加如下所示的新消息:
{"received":"new date","body":"new message again","fromName":"Futurum Digital"}
在每个线程循环上。
我有一个 CSV 文件,其中包含我设置为变量 MESSAGE 的消息:
message1,
message2
我想我需要这样的功能(不正确的 Java 语法,翻译成 javascript-ish):
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
JMeter Variable,其值为
{
"body": [
{
"received": "2018-05-17T11:28:51.000Z",
"fromName": "Jesper Pedersen",
"body": "test\n"
}
]
}
您可以使用 JSR223 Test Element 添加另一个条目,代码如下:
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())
演示:
更多信息:
所以我想通过发送大量消息来对我的 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"}
]
我想知道如何使用 JMeter 循环这个过程(我想通过某种方式使用 Beanshells 预处理器)。也就是说,我希望每个线程循环都将新消息添加到该数组主体中。我需要一些数组列表来保存每个循环中的数据,并添加如下所示的新消息:
{"received":"new date","body":"new message again","fromName":"Futurum Digital"}
在每个线程循环上。
我有一个 CSV 文件,其中包含我设置为变量 MESSAGE 的消息:
message1,
message2
我想我需要这样的功能(不正确的 Java 语法,翻译成 javascript-ish):
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
JMeter Variable,其值为
{
"body": [
{
"received": "2018-05-17T11:28:51.000Z",
"fromName": "Jesper Pedersen",
"body": "test\n"
}
]
}
您可以使用 JSR223 Test Element 添加另一个条目,代码如下:
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())
演示:
更多信息: