Я новичок в программировании и мне необходимо написать программу для нагрузочного тестирования с JMeter, поскольку я не могу найти существующий инструмент с графическим интерфейсом для выполнения того, что я хочу.
Я пытаюсь загрузить тестприложение WebSocket с использованием плагина JMeter « JMeter WebSocket Sampler ».
Мне нужно посоветовать, как мне следует обрабатывать сообщения, отправленные с сервера WebSocket.
Вот некоторые условия,
- После установления соединения с сервером WebSocket сервер отправляет сообщения JMeter в произвольные сроки.
- Когда JMeter получает сообщение, он должен вернуть сообщение, чтобы уведомить о получении сообщения..
- На основании содержимого сообщения с сервера JMeter должен изменить локальные переменные.
Вот мой текущий обзор конфигурации JMeter.
Используйте Параллельный контроллер , чтобы разделить поток для получения сообщения и отправки сообщения.
При получении цепочки сообщений я пытался использовать JSR223 Listner под пустым сэмплером WebSocket для написания JavaScript для обработки полученных данных.Сервер отправляет данные в формате JSON.
При отправке цепочки сообщений я использую контроллер Loop, который будет ожидать изменения значения переменной при получении цепочки сообщений на основе сообщений сервера.
Например, когда сервер отправляет сообщение «Event_A_Notify» в JMeter, получая проверку потока сообщений и устанавливая переменную Event в «A».Затем поток сообщений отправит на сервер сообщение «Event_A_Received».
У меня возникла проблема с обработкой полученных сообщений.
В JSR223 Lisner я могу использовать sampleResult.getResponseDataAsString () метод для извлечения сообщений с сервера WebSocket в строковом формате.
Вот как выглядят данные.(Я изменил содержимое, чтобы оно выглядело просто. Фактическое содержимое сообщения больше с большим количеством свойств).
[Message 1]
{"Sample1":"A","uuid":"a5c77959-0284-40eb-9523-8706c947b620"}
[Message 2]
{"Sample2":"B","uuid":"93330fff-13fe-4040-9fe7-0e6d7054ee4a"}
[Message 3]
{"Sample3":"C","uuid":"099cea81-6f8f-4417-b0c5-29199f42a6f3"}
[Message 4]
{"Sample4":"D","uuid":"01bf3c23-87cb-41cb-ab04-1a9613a508a1"}
Когда полученное сообщение превышает 10, JMeter удаляет старое сообщение, чтобы сохранить 10 самых последних сообщений.
[Message 8]
{"Sample8":"H","uuid":"01bf3c23-87cb-41cb-ab04-1a9613a508a1"}
[Message 9]
{"Sample9":"I","uuid":"01bf3c23-87cb-41cb-ab04-1a9613a508a2"}
[Message 10]
{"Sample10":"J","uuid":"01bf3c23-87cb-41cb-ab04-1a9613a508a3"}
[Message 11]
{"Sample11":"K","uuid":"01bf3c23-87cb-41cb-ab04-1a9613a508a4"}
[Message 12]
{"Sample12":"L","uuid":"01bf3c23-87cb-41cb-ab04-1a9613a508a5"}
[Message 13]
{"Sample13":"M","uuid":"01bf3c23-87cb-41cb-ab04-1a9613a508a6"}
[Message 14]
{"Sample14":"N","uuid":"01bf3c23-87cb-41cb-ab04-1a9613a508a7"}
[Message 15]
{"Sample15":"O","uuid":"01bf3c23-87cb-41cb-ab04-1a9613a508a8"}
[Message 16]
{"Sample16":"P","uuid":"01bf3c23-87cb-41cb-ab04-1a9613a508a9"}
[Message 17]
{"Sample17":"Q","uuid":"01bf3c23-87cb-41cb-ab04-1a9613a50810"}
Вот содержимое JSR223 Listner для обработки полученного сообщения.
В основном я делаю следующее.
- Использование sampleResult.getResponseDataAsString(); для получения ответа.
- Использование String (responseData) .split (/ [Message [0-9] +] /); и разбиение строки намассив сообщений путем удаления [Message \ d].
- Используйте объект массива messageArray для хранения всего ответа от сервера WebSocket.И обрабатывайте один за другим в цикле for.
var responseData = sampleResult.getResponseDataAsString();
var counter = parseInt(vars.get("counter1"));
var messageList = new String(responseData).split(/\[Message [0-9]+\]/);
messageList.shift();
var messageArray = vars.getObject("messageArray");
messageList.forEach(function(message, index) {
if (messageArray.indexOf(message) >= 0) {
return true;
}
else {
messageArray.push(message);
}
});
for (i = counter; i < messageArray.length; i++) {
if (messageArray[i].match(/(someEvent).*/)) {
vars.put("userVariable",true);
counter += 1;
break;
}
else {
vars.put("userVariable",false);
counter += 1;
}
}
vars.put("counter1",counter);
vars.putObject("messageArray", messageArray);
Проблема с этим кодом:
- Поскольку объект messageArray хранит всесообщения, messageArray становится слишком большим, и JMeter в конечном итоге завершится сбоем из-за исключения OutOfMemory.
- Код для проверки того, существует ли полученное сообщение в messageArray, слишком медленный, и производительность снижается экспоненциально по мере увеличения количества хранимых сообщений.
Может ли кто-нибудь предложить более эффективный и умный способ обработки сообщений WebSocket в JMeter?
Я действительно ценю ваш вклад.
Спасибо,
С наилучшими пожеланиями,