Розробники-початківці досить рідко роблять тестування навантаження сайтів і веб-додатків. І буває так, що при збільшені онлайну сайт в найбільш відповідальний момент починає гальмувати.
Чому б не уникнути цих неприємностей, провівши тест навантаження?
Напевно, когось зупиняє невірне уявлення про те, що тестування навантаження – це дуже складна справа, що вимагає спеціальних знань. Однак, якщо є вибір – тестувати не надто професійно, або не тестувати зовсім, я б обрав перше. Тим більше, що організувати примітивний тест навантаження дуже просто. Можна скористатися онлайн-засобами, а можна виконати все своїми руками, це ненабагато складніше.
Для прикладу візьмемо програму Apache JMeter. JMeter є дуже потужним інструментом навантажувального тестування з можливістю створення великої кількості запитів одночасно завдяки паралельній роботі на декількох комп’ютерах. Підтримує плагіни, за допомогою яких можна значно розширити функціонал. Завантажити JMeter можна за посиланням з офіційного сайту, для запуску потрібно розпакувати і запустити \bin\jmeter.
Запустивши програму, ліворуч бачимо 2 пункти – Test Plan і WorkBench. Додамо Thread Group в Test plan, що дозволить керувати потоками (тобто, симулювати кроситувачів). Для цього потрібно натиснути правою клавішею на Test plan – Add – Threads (Users) – Thread group.
Додамо 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. Необхідно зайти туди і знайти цей рядок. Там можна побачити причину помилки. В нашому випадку помилок немає, а інформація зображається там в наступному виді:
На цьому тестування завершено. В ході нього ми перевірили сайт на навантаження і отримали дуже наочні результати.
Гарна інфа, раніше не міг знайти такого наочного прикладу)