Организации нагрузочного тестирования с помощью jmeter. Сколько максимально может выдержать посещений сайт?

Нужно выполнить нагрузочное тестирование с помощью jmeter. Получилось немного разобраться с jmeter, записать сценарий прогона по сайту, указать количество users, поставить таймер, добавила различные listener для наглядности выполнения теста. Не могу понять как пользоваться полученной информацией, полученными графиками и таблицами. И самое главное как понять сколько максимально может выдержать посещений сайт? (в настоящий момент по статистике максимальное количество посещений 15 000, руководство хочет убедиться что сервер выдержит 40 000). Я в этом деле новичок, буду благодарна любым советам.

Привет! Тебе нужно настроить мониторинг сервера, на котором крутится твое приложение. Нужно понять, что происходит с его ресурсами при разной нагрузке. Для начала посмотри загрузку процессора и оперативной памяти.
У тебя windows или Linux сервер?

У меня Windows, посмотреть загрузку процессора и оперативной памяти при выполнении теста? Если указываю малое количество users то около 40%, если пытаюсь поставить 1000 users то почти под 95%.
Сам сервер приложения находится не на моем компе. Я могу обратиться только по ссылке на сайт, в jmeter я через http request ее и указываю.

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

  • на сколько твой сервер соответствует промышленному по железу - процессору, объему памяти и дисков
  • насколько БД приложения соответствует промышленной по объему данных
  • правильно ли составлен профиль нагрузки - т.е. количество и интенсивность и типы запросов похожи на те, которые пользователи шлют приложению в реальной работе

В идеале условия теста должны быть как в проде.

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

После какой-то интенсивности нагрузки утилизация зашкалит и сервер не сможет обрабатывать все полученные запросы, поваляться ошибки и сильно увеличения время отклика.

Тогда можно будет предварительно сказать, что максимальная возможная нагрузка - это уровень ступени до роста утилизации.

После обнаружения максимума обычно проводят тест надёжности. Для этого устанавливают интенсивность нагрузки на уровне максимум -10% и запускают тест на несколько часов вплодь до суток.
Если за время проведения такого теста были ничего с загрузкой сервера не случилось, можно писать отчёт, что приложение держит нагрузку в столько-то пользователей.

2 лайка

А если нет доступа к серверу? Возможно ли провести нагрузочное тестирование?

Возможно конечно.
Можно следить за производительностью по времени отклика на запросы(response time graph lisetner) и по количеству ошибок в summary report listener
Соответственно, нужно знать только, какое время отклика считается приемлемым.

Если ставлю малое количество users <50, то тесты все проходят успешно и в summary report в error 0%. Я добавила много listener но не могу понять как это все может пригодится, также использовала Simple Data Writer(но при просмотре также ничего не понятно, сохраняется Excel и просто набор данных). Вопрос собственно в том, как это расшифровать и как эти данные на самом деле могут помочь. Если ставлю users >500 все зависает, приходится выключать через диспетчер задач. И как тогда можно проверить на большое количество users?

Посмотри на этот плагин для jmeter

Он позволяет строить нагрузку со сложным профилем.
Попробуй установить его, и создать такой тест: начать с 50 юзеров, и каждые полчаса добавлять по 25 юзеров.
Из listener’ов оставить только response time graph.
Сделай для начала несколько таких ступеней. Посмотри, что будет со временем отклика на каждой. Если окажется например, что до 200 пользователей все ок, переделай сценарий начиная с 200 пользователей и накидывая на каждом шаге нагрузки по 50.
Так ты сможешь понять, до какого количества пользователей у тебя время отклика в пределах нормы.
Остальные listener’ы пока не нужны, разве что summary для определения, сколько у тебя ошибок

Начала с 10 users, тест только на открытие сайта. Как понять через каждых полчаса добавлять users?

Время теста 21с. Возможно я не очень понимаю структуру самого теста. Вот что на выходе.

В правом столбике duration поставь 600 секунд. Тогда у тебя будет тест, где в течении 10 минут на сайт заходят по 100 раз в секунду.
Потом добавь новую строку, в ней напиши startRPS 100, endRPS 150 duration 60 и еще одну startRPS 150 endRPS 150 duration 600
У тебя получится тест на 20 минут с двумя ступенями нагрузки по 100 и 150 запросов в секунду.
Запусти и посмотри, что происходит со временем отклика. Если на второй ступене оно не улетит в облака, добавь по тому же принципу ещё парочку ступенек.

Получилось следующее

Ага, я не правильно подсказал.
Таблица должна быть примерно такой:
1 100 60
100 100 600
100 150 60
150 150 600

Понятно, что означают эти цифры?

Не совсем понятно, была бы рада пояснению цифр и полученного графика.

Таблица должна быть примерно такой:
1 100 60
100 100 600
100 150 60
150 150 600

Понятно, что означают эти цифры?


Не совсем понятно, была бы рада пояснению цифр

Поднять нагрузку от 1 до 100 запросов в секунду на протяжении 60 секунд
Держать нагрузку 100 запросов в секунду на протяжении 600 секунд
Поднять нагрузку от 100 до 150 запросов в секунду на протяжении 60 секунд
Держать нагрузку 150 запросов в секунду на протяжении 600 секунд

И самое главное как понять сколько максимально может выдержать посещений сайт? (в настоящий момент по статистике максимальное количество посещений 15 000, руководство хочет убедиться что сервер выдержит 40 000)

Мне кажется разговор трэда ушёл немного в сторону.
Во первых нужно уточнить о чём идёт речь. Я так понимаю цель не просто 15000 или 40000 посещений, но именно посещений в секунду?

Если так, то прямо из коробки, JMeter не позволяет генерировать нагрузку измеряемую в RPS(requests per seconds). У JMeter парадигма - он создаёт определённое количество users, которые генерируют requests, и потом измеряет количество получившихся requests и другие метрики.
То есть в JMeter нет возможности создать нагрузку вроде такой: нагрузи сервер с 1000 RPS и посмотри, что получится. Это может делать Yandex.Tank, Gatling …
JMeter создаёт нагрузку по типу: отправь 1000 users на сервер и посмотри, сколько RPS они сгенерируют за X минут.

2 лайка

На самом деле есть. Её можно указать, например, через Constant Throughput Timer

Нет, Constant Throughput Timer вам поможет генерировать заданное число RPS лишь в ограниченном количестве сценариев. Достаточно сказать, что принцип работы Constant Throughput Timer - это вводить паузы для трэдов, чтобы получить какое-то число RPS. Но если сервер “тормозит” с ответами, то вы Jmeter не сможет выдать заданное количество RPS.

1 лайк

Спасибо! А как понять результат? Где я могу посмотреть и сделать какой-то вывод?

Спасибо за ответ! Пока хотелось бы разобраться с jmeter, и понять его возможности. Может посоветуете хороший источник по jmeter. Все что я находила, в основном на составление тестов через Test Script Recorder и добавления всяких плюшек, с этим более менее понятно, но вот как потом обрабатывать результат не ясно.