Стресс / нагрузочный тест веб-приложения с использованием простого веб-сервиса - PullRequest
1 голос
/ 05 августа 2011

В настоящее время я пишу плагин JMeter для проверки исправления ошибки, которая, по-видимому, возникает, только когда наше веб-приложение находится под большой нагрузкой.

В качестве общего решения, позволяющего писать нагрузочные / стресс-тесты для тестирования определенных разделов веб-приложения, я думаю о добавлении простого успокоительного веб-сервиса для вызова тестов. Основная причина сделать это - обойти браузер, так как то, что мы заинтересованы в тестировании, это уровень бизнес-логики и доступа к базе данных (устаревший встроенный SQL).

Стоит ли это времени и усилий или возможно использовать JMeter для тестирования сложного веб-приложения, которое требует аутентификации и интенсивно использует Javascript и Ajax.

EDIT

Цель этих тестов - проверить, как бизнес-логика и уровень доступа к данным справляются с ситуациями с высокой нагрузкой, чтобы убедиться в отсутствии ошибок или проблем параллелизма. Это устаревшее веб-приложение jsp (т.е. написанное в начале середины 90-х годов), в котором в основном встроенный sql находится в процессе перехода на уровень DAL.

Ответы [ 3 ]

2 голосов
/ 05 августа 2011

Вы получаете несколько преимуществ от использования специального API только для нагрузочных тестов:

  • Этот API будет стабильным, веб-интерфейс будет меняться (входы, кнопки и т. Д.)
  • Вы можете разработать свой API, чтобы можно было создавать соответствующие сценарии загрузки, которые трудно смоделировать с помощью веб-интерфейса
  • Создание сценариев загрузки будет намного проще, будь то использование JMeter или аналогичного инструмента, или просто сценарий с использованием curl

Теперь осталось только оценить, сколько работы займет создание такого API, и стоит ли оно того.

1 голос
/ 05 августа 2011

Проблема прямого перехода к бизнес-логике заключается в том, что вы никогда не можете быть уверены, что у вас нет проблемы на уровне представления, который создает дополнительную нагрузку на ваш сервер. А тестирование бизнес-логики само по себе может означать отсутствие возможных проблем с производительностью (например, если во многих сеансах HTTP много объектов, ваш сервер может проводить большую часть своего времени в сборщике мусора, поскольку куча слишком мала ), поэтому я бы порекомендовал создать сложный план тестирования, охватывающий все вызовы на сервер.

Самый простой способ добиться этого - использовать HTTP-прокси JMeter, запустить браузер и позволить HTTP-прокси записать план тестирования для вас.

См. Базовый прокси JMeter шаг за шагом о том, как начать работу с прокси.

Это запишет все вызовы, сделанные из браузера на сервер (вас не интересует сам javascript, так как это происходит в браузере, поэтому не повлияет на загрузку сервера, хотя вызовы AJAX будут).

План тестирования, созданный прокси-сервером HTTP, жестко закодирует все значения, поэтому вам, вероятно, придется пройти через него, чтобы определить, какие значения различаются при каждом вызове (например, если у вас есть опция создания, которая возвращает новый идентификатор, последующие запросы должны использовать идентификатор, возвращаемый сервером.

Чтобы получить эти значения, вы можете добавить Извлечение регулярных выражений к вашим запросам и назначить имя переменной, которое затем можно будет повторно использовать в качестве параметра запроса в последующем запросе. Просматривать параметры запроса и определять, какие из них необходимо заменить значениями, которые необходимо проанализировать с предыдущих страниц, может быть немного утомительно, но это не так сложно.

Например, если ваша страница содержит идентификатор записи в возвращаемом HTML

<input type="hidden" name="recordId" value="abcqwer123" />

, который необходимо использовать в следующем запросе, вы можете использовать следующее регулярное выражение для его извлечения:

name="recordId"\s+value="([a-z0-9]+)"

Еще одна вещь, которую нужно иметь в виду, это убедиться, что вы используете широкий диапазон тестовых данных (например, если вы имитируете несколько пользовательских логинов, вам нужно убедиться, что не каждый тест выполняется с тем же userId, как кэширование может означать, что тяжелые операции, такие как поиск в БД, выполняются только при первом запуске. Чтобы упростить использование нескольких учетных записей, вы можете использовать CSV Data Set Config , чтобы загрузить список значений в переменную, которая затем меняется с каждой итерацией.

Мой последний совет - изучить запуск JMeter в Распределенном режиме . Здесь вы запускаете Jmeter-сервер на нескольких удаленных клиентах, которые затем выполняют один и тот же тест. Это гарантирует, что тестовые клиенты сами создают узкие места, не имея достаточного количества ядер ЦП или пропускной способности сети для создания большого количества одновременных запросов.

0 голосов
/ 05 августа 2011

Вместо написания службы REST и ее вызова через JMeter, если у вас есть тесты JUnit, вы можете использовать JUnit Sampler и повторно использовать существующие тесты доступа к данным и бизнес-уровней.

...