Как провести нагрузочное тестирование приложения JMix?

Добрый день.
Подскажите, пожалуйста, какими инструментами провести нагрузочное тестирование JMix приложения?

Хочется сымитировать одновременную работу нескольких десятков пользователей и посмотреть на серверное потребление RAM / CPU.

Ранее доводилось тестировать только приложение с REST API - тогда использовался JMeter, который в определенном порядке совершал запросы. (к примеру, запросы на редактирование и потом получение данных)

Судя, по всему, с JMix такой подход не подойдет - т.к. JMix по сети отправляет довольно специфичные запросы, к примеру на каждое редактирование ТекстБоксов… итд.

Правильно ли я подозреваю, что лучше всего написать робота, который именно “жмет” кнопки интерфейса? Какой инструмент для этого взять?

Здравствуйте!

Да, Vaadin отправляет специфичные запросы, практически на каждое действие пользователя.
В том же JMeter такие запросы можно записать, а затем воспроизвести.

На CUBA форуме есть подобная статья: Performance testing for Web UI with JMeter - CUBA.Platform.

Как написать пробный сценарий на Jmix:

  1. Включить свойство jmix.ui.performanceTestMode=true (с версии 1.3.4). Оно выключит xsrf защиту.
  2. Настроить свой план JMeter, как в статье выше.
  3. По той же статье настроить прокси в FireFox. Последние версии FF не проксируют localhost, поэтому можно использовать свой локальный IP при обращении в браузере.
  4. Записать свои действия в приложении и воспроизвести.
4 симпатии

:fire:

Огонь! Спасибо за оперативный ответ.

@pinyazhin , добрый день.
У меня появился дополнительный вопрос по нагрузочному тестированию.
Я записал шаги пользователя , как указано в Вашей инструкции.
Имеем следующие шаги:

  1. Открытие логин формы.
  2. Логин.
  3. Открытие несколько экранов
  4. Разлогин.

Если мы эмулируем нагрузку в несколько пользователей как показано на скриншоте, то все тесты одновременно стучатся в JMix под одним user/login - тем который был использован при записи шагов.

Может ли это как то сказаться на качестве тестов?
Действительно ли это аналогично подобным тестам при которых у меня была бы возможность для каждого потока указать свой логин пароль?

image

Добрый день!

Статья показывает самый простой вариант начала тестирования приложения. Дальнейшая настройка тестов и самого JMeter ложится на пользователя.

В теории можно попробовать использовать разных пользователей для Thread Group-ы. Например, получать из CSV файла username и пароль и использовать их через переменные в записанных запросах. Начиная с версии Jmix 1.3.4 значение id RPC запроса не зависит от username пользователя.
Однако могут возникнуть сложности с такими параметрами запроса как syncId и clientId, т.к. они итерируются на каждый запрос (возможно, в каких-то кейсах придётся их итерировать самому в JMeter).

В идеале стоит иметь ещё проверку того, что кейс полностью выполнился. Например, если тест создаёт экзмепляр сущности, то желательно проверить в БД, что он создан. Потому что выполнение запроса к Vaadin (200 OK) не гарантирует, его логическое выполнение в системе (м.б. из-за каких-то ошибок).

1 симпатия