Приклад тесту навантаження з Apache JMeter

Розробники-початківці досить рідко роблять тестування навантаження сайтів і веб-додатків. І буває так, що при збільшені онлайну сайт в найбільш відповідальний момент починає гальмувати.

Чому б не уникнути цих неприємностей, провівши тест навантаження?

Напевно, когось зупиняє невірне уявлення про те, що тестування навантаження – це дуже складна справа, що вимагає спеціальних знань. Однак, якщо є вибір – тестувати не надто професійно, або не тестувати зовсім, я б обрав перше. Тим більше, що організувати примітивний тест навантаження дуже просто. Можна скористатися онлайн-засобами, а можна виконати все своїми руками, це ненабагато складніше.

Для прикладу візьмемо програму Apache JMeter. JMeter є дуже потужним інструментом навантажувального тестування з можливістю створення великої кількості запитів одночасно завдяки паралельній роботі на декількох комп’ютерах. Підтримує плагіни, за допомогою яких можна значно розширити функціонал. Завантажити JMeter можна за посиланням з офіційного сайту, для запуску потрібно розпакувати і запустити \bin\jmeter.


Запустивши програму, ліворуч бачимо 2 пункти – Test Plan і WorkBench. Додамо Thread Group в Test plan, що дозволить керувати потоками (тобто, симулювати кроситувачів). Для цього потрібно натиснути правою клавішею на Test plan – Add – Threads (Users) – Thread group.

1

Додамо HTTP Request Defaults, який призначений для налаштування запиту для тестування. Зробити це можна, натиснувши правою кнопкою миші по Thread Group і обравши Add – Config Element – HTTP Request Defaults.

В елементі HTTP Request Defaults в поле Server name введемо адресу сайта, який збираємось тестувати. В нашому випадку це “myrasp.com”.

Теперь необхідно додати Recording Controller, що буде записувати наші дії для подальшого відтворення (Thread Group – Add – Logic Controller – Recording Controller)

Виберемо WorkBench і додамо HTTP(S) Test Script Recorder (Add – Non-Test Elements – HTTP(S) Test Script Recorder)


Примітка! Для деяких старих сайтів, що містять явну назву з закінченням .html без переадресації, або для інших потреб необхідно натиснути на кнопку “Add” в розділі “URL Patterns to Include”. Це створить пустий запис, в який потрібно ввести “.*\.html”


Додамо відображення наших результатів запису (HTTP(S) Test Script Recorder – Add – Listener – View Results Tree)

Повернемося до HTTP(S) Test Script Recorder і натиснемо кнопку Start унизу. Цим ми почнемо запис наших дій в браузері.


Тепер необхідно налаштувати браузер для роботи з Apache JMeter. Для цього відкриваємо браузер (в моєму випадку це Mozilla Firefox) і обираємо налаштування. Тут потрібно відкрити налаштування мережі.

В новому вікні необхідно обрати ручні налаштування, ввести в поле адреси “localhost”, а в поле порту – “8080” та відмітити пункт про використання даних налаштувань для всіх протоколів, та зберегти внесені зміни.


Нарешті ми можемо розпочати запис. Для цього в браузері перейдемо за адресою myrasp.com і виконаємо певну активність (попереходимо між сторінками, поклікаємо на різні кнопки тощо). Цей сайт використовує кешування інформації для авторизації, тому немає необхідності застосовувати плагін JMeter-а для цього.

Recording Controller записав нашу активність (більш докладно можна подивитися в View Results Tree) і ми майже готові розпочати тестування навантаження.

Лише додамо елементи для перегляду результатів Summary Report (Thread Group – Add – Listener – Summary Report) і Graph Results (Thread Group – Add – Listener – Graph Results).

Перейдемо до Thread Group. Виберемо кількість потоків (користувачів) – 5, час приєднання нового користувача встановимо значення 10 (секунд), а в кількість циклів поставимо значення 50.

Перед кожним запуском необхідно виконати наступні дії:

  • Ctrl-S для збереження
  • Ctrl-E для очищення минулих результатів
  • Ctrl-R, власне, для запуску (також можна використовувати кнопку Run – Start)

Після виконання тесту можемо подивитися результати. Зайдемо в Graph Results і проаналізуємо.

Значення надані в мілісекундах:

  • Data – час відповіді кожної окремої одиниці даних тобто кожного перевіреного url.
  • Average – усереднений час відгуку, об’єктивний графік зміни навантаження.
  • Median – значення медіани (використовується в статистиці).
  • Deviation – похибка, стандартне відхилення.
  • Throughput – пропускна здатність виконуваних запитів.

Для роботи досить значень Average і Throughput, які відобразять навантаження на веб-сервер і пропускну здатність запитів. За графіком вище видно, що час відповіді приблизно 400мс і не росте, тобто, сервер нормально витримує навантаження в 5 віртуальних користувачів. А ось що вийде, якщо їх буде 50:

Час відгуку значно збільшується.

Summary Report може відобразити статистику по кожному індивідуальному url окремо.

У стовпці Average бачимо середній час відгуку, логічно припустити, що чим час більший – тим більше навантаження на даний url. Часто виявляється що є кілька важких сторінок, які в першу чергу і створюють навантаження на систему, і якщо їх оптимізувати, загальна продуктивність багаторазово збільшується (краще всього починати оптимізацію зі сторінок, які за статистикою викликаються часто, а відпрацьовують довго).

View Result in Table відобразить результат у вигляді таблиці, тут вказано час, а також статус (успішно / неуспішно).

При виникненні помилки причину можна перевірити в View Result Tree. Необхідно зайти туди і знайти цей рядок. Там можна побачити причину помилки. В нашому випадку помилок немає, а інформація зображається там в наступному виді:

На цьому тестування завершено. В ході нього ми перевірили сайт на навантаження і отримали дуже наочні результати.

  1 comment for “Приклад тесту навантаження з Apache JMeter

  1. Влад
    9 Червня, 2015 at 02:42

    Гарна інфа, раніше не міг знайти такого наочного прикладу)

Comments are closed.