Здаючи веб-сервер в повсякденну експлуатацію, потрібно бути впевненим, що він
витримає плановану навантаження. Тільки створивши умови, наближені до бойових,
можна оцінити, чи достатня потужність системи, правильно встановлені такі
додатки, які беруть участь у створенні веб-контенту, і інші чинники, що впливають на
роботу веб-сервера. У цій ситуації на допомогу прийдуть спеціальні інструменти,
які допоможуть дати якісну і кількісну оцінку роботи як
веб-вузла в цілому, так і окремих його компонентів.
Все йде за планом
Перш ніж кидатися в бій, спочатку слід розібратися, що ми хочемо
отримати в результаті тестування. Адже перевірка, як і будь-яка інша робота,
вимагає попередньої підготовки. При неправильно сформульованої задачі
можуть вийти результати, які будуть в повному обсязі відображати реальне
стан справ. Виходячи з передбачуваного навантаження веб-сервера, необхідно
визначитися з критеріями випробування. Встановити, що буде вважатися як успіх,
а що як неприйнятна робота сервісу (наприклад, час відповіді, завантаження
сервера). Розрізняють три варіанти тесту:
- Навантажувальний (Load-testing) - визначається працездатність системи
при деякій суворо заданої заздалегідь (планованої, робочої) навантаженні. - Стійкості (Stress) - застосовується для перевірки параметрів системи
в анормальних та екстремальних умовах, основне завдання під час цього тесту -
спробувати порушити роботу системи. Дозволяє визначити мінімально
необхідні величини системних ресурсів для роботи програми, оцінити
граничні можливості системи і фактори, що обмежують ці можливості.
Також визначається здатність системи до збереження цілісності даних при
виникненні позаштатних аварійних ситуацій. - Продуктивності (Performance) - комплексна перевірка, що включає
попередні два тести, призначена для оцінки всіх показників системи.
Результат тесту - максимальне число користувачів. які можуть
одночасно отримати доступ до веб-вузла, число запитів, що обробляються
додатком, або час відповіді сервера. Грунтуючись на отриманому результаті,
веб-майстер і мережевий адміністратор (в роботі сервера беруть участь і інші
компоненти мережі, маршрутизатори, брандмауер, кешуючий і проксі-сервер, база
даних та ін.) зможуть заздалегідь виявити вузькі місця, що виникають із-за
незбалансованої роботи компонентів, і виправити ситуацію, перед тим як
включати систему в реальну роботу.
Під час тестування імітується одночасна робота декількох сотень
або тисяч відвідувачів. Для більшої правдивості кожен з віртуальних
користувачів може «ходити» по сайту за індивідуальним сценарієм і мати особисті
параметри. Також в процесі тестування можна імітувати короткочасні піки
навантаження, коли кількість відвідувачів стрибкоподібно збільшується, що дуже
актуально для сайтів з нерівномірною аудиторією. Отже, щоб повноцінно провести
тестування, необхідно знати:
Будь-який з цих параметрів може вплинути на кінцевий результат. Не обов'язково
всі перевірки включати в один тест, можна розбити спочатку задачу на підзадачі.
Наприклад, перевірка базової системи (сервери: веб, додатків, бази даних) і
перевірка окремих модулів (сервлети, скрипти та ін. наприклад, перевірка
аутентифікації при великій кількості користувачів). В результаті при
тестуванні видаються графіки трьох видів: лінійний, нелінійний і насичення. В
першому випадку при зростанні навантаження час відгуку (тобто обробки) залишається
постійним. При подальшому збільшенні навантаження час відгуку також збільшується
(Майже лінійно), і, нарешті, настає ситуація, подібна DOS-атаки, коли час
відгуку нескінченно збільшується. Тепер, коли план дій готовий, переходимо до
короткому огляду утиліт, які допоможуть його втілити. Почнемо з безкоштовних.
Open Systems Testing Architecture
Apache JMeter
Apache JMeter (jakarta.apache.org/jmeter)
є Java-додатком з відкритим кодом, призначений для навантажувального
тестування не тільки веб-додатків і їх окремих компонентів (скрипти,
сервлети, Java об'єкти і ін.), але також FTP-серверів, баз даних (з
використанням JDBC) і мережі. Функціональність розширюється за допомогою плагінів.
Підтримується SSL (через Java Secure Sockets Extension). можливе проведення
тестів як з використанням графічного інтерфейсу, так і з командного рядка.
Використання Java на увазі кроссплатформенность, тому JMeter
впевнено працює в різних * nix-системах, в Windows від 98 і деяких інших
ОС. Поширюється під Apache License.
Для роботи досить запустити ApacheJMeter.jar або в консолі jmeter.bat
(Windows) або jmeter.sh (* nix).
JMeter має вбудований проксі-сервер, який призначений для запису
сесій, але можна використовувати і зовнішній. Перед початком тестування необхідно
скласти тестовий план, що описує серію завдань, які необхідно виконати
JMeter. Він повинен містити одну або кілька груп потоків (Thread
Groups) і інші елементи:
- Логічні контролери (Logic controllers);
- Типові контролери (Sample generating controllers);
- Слухачі (Listeners);
- Таймери (Timers);
- Відповідності (Assertions);
- Конфігураційні елементи (Configuration elements).
Безкоштовні продукти, на жаль, закінчилися, тепер парочка комерційних рішень.
WAPT - Web Application Testing
WAPT (www.loadtestingtool.com)
дозволяє випробувати стійкість веб-сайту та інших додатків, що використовують
веб-інтерфейс, до реальних навантажень. Розробляється новосибірської компанією
SoftLogica LLC. Це одна з найпростіших у використанні програм огляду. для
проведення простого тесту навіть не потрібно заглядати в документацію, інтерфейс
простий, але не локалізований. Працює під управлінням Windows від 98, підтримується
і Vista. Для перевірки WAPT може створювати безліч віртуальних
користувачів, кожен з індивідуальними параметрами. підтримується кілька
видів аутентифікації і куки. Сценарій дозволяє змінювати затримки між
запитами і динамічно генерувати деякі випробувальні параметри,
максимально імітуючи таким чином поведінку реальних користувачів. У запит
можуть бути підставлені різні варіанти HTTP-заголовка, в налаштуваннях можна
вказати кодування сторінок. Параметри User-Agent, X-Forwarded-For, IP вказуються
в настройках сценарію. Значення параметрів запиту можуть бути розраховані
декількома способами, в тому числі, визначені відповіддю сервера на попередній
запит, використовуючи змінні і функції. Підтримується робота по захищеному
протоколу HTTPS (і всі типи проксі-серверів). Створені сценарії, які зберігаються в
файлі XML-формату, можна використовувати повторно. Крім стандартних Performance і
Stress, в списку присутні кілька інших тестів, що дозволяють визначити
максимальну кількість користувачів і тестувати сервер під навантаженням в
Протягом довгого періоду.
За допомогою NeoLoad можна проводити і розподілені тести. Один з
комп'ютерів є контролером, на інші встановлюються генератори
навантаження (loadGenerator). Контролер розподіляє навантаження між loadGenerator і
збирає статистику.
Сценарій майбутнього тесту створити дуже просто. Запускаємо програму (при
першому запуску буде потрібно ввести реєстраційний ключ, 30-денна версія після
реєстрації буде надіслано поштою), вибираємо New Project, вводимо назву
проекту. Після цього буде показана невелика підказка з приводу подальших
дій, натискання Start Recording запустить веб-браузер, всі переміщення будуть
записані. Після закінчення натискаємо Stop Recording або закриваємо браузер.
Запускається майстер, який допоможе створити віртуальних користувачів і
справить автоматичний пошук динамічних параметрів в записаних сторінках,
виставить середнє значення thinktime. Компоненти сторінки (HTML, images, CSS)
зберігаються окремо. Для отримання результату потрібно пройти три етапи:
- Design - настройка проекту, тут три вкладки. У Repository вказуються
веб-сторінки і параметри запитів, в Virtual User створюються віртуальні
користувачі, вказуються URL, які вони повинні "відвідати", і додаткові
умови з лівої вкладки поля Actions. У Populations - завдання кожної з груп
користувачів. У Actions можуть бути обрані наступні дії: Delay
(Установка затримки), Loop (повтор запиту), While (цикл), If ... Then ... Else
(Умова), Container і Random Container (групові дії), Try ... Catch
(Обробка помилок), Stop virtual user (зупинка роботи віртуального
користувача). - Runtime - вказуються параметри тесту, проводиться тест. Тут же в
окремих вкладках по ходу проведення тесту виводиться статистика. - Results - відповідає за виведення різної статистики у вигляді таблиць і графіків.
Причому крім загальних значень, за допомогою системи фільтрів можна відібрати
інформацію з будь-якого параметру. При бажанні проект зберігається для повторного
використання. Серед представлених продуктів можливість порівняння результатів
тесту є тільки у NeoLoad.
Використовуючи утиліти навантажувального тестування, можна отримати інформацію про
роботі веб-сервісу, вжити необхідних заходів щодо усунення виявлених
недоліків і гарантувати необхідну продуктивність.
Продукти від Microsoft
Корпорація Microsoft пропонує цілих два продукти, що дозволяють
протестувати веб-сервер під навантаженням. Це Microsoft Application Stress
Tool і Web Capacity Analysis Tool. Перший поширюється як
окремий продукт і має графічний інтерфейс. Другий входить до складу
комплекту інструментів Internet Information Services 6.0 Resource Kit Tools,
працює з командного рядка. MAST більш наочний, в створенні тесту
допоможе простий майстер створення тестів, можлива робота з cookies, регулювання
навантаження за різними URL. Сценарій тестування може бути створений вручну або
записаний за допомогою веб-браузера та при необхідності відредагований. У WAST
рівень навантаження (stress level) регулюється шляхом завдання кількості ниток,
здійснюють запити до сервера, а число віртуальних користувачів
розраховується як добуток кількості ниток на число гнізд, відкритих кожної з
ниток. Після закінчення тесту отримуємо простий звіт в текстовій формі, в якому
дана інформація по числу оброблюваних запитів в одиницю часу, середнього
часу затримки, швидкості передачі даних на сервер і з сервера, кількістю
помилок і т.д. Звіт можна експортувати в CSV-файл. Ніяких можливостей по
статистичній обробці не передбачено, тобто з його допомогою можна тільки
оцінити роботу за певних умов.
Покажи цю статтю друзям: