Нагрузочное тестирование с помощью Grinder Илья Евлампиев Exigen Services
Нагрузочное тестирование… определение того, как быстро работает система при определенной нагрузке. Позволяет также определить такие параметры системы как расширяемость и надежность. Вкратце, это: Имитация реальной нагрузки на систему Выполнение тестов Анализ результатов
Цели нагрузочного тестирования Недопущение «падения» системы Обойтись без излишних затрат на «железо» Снизить стоимость продукта Облегчить обслуживание Продемонстрировать заказчику, что система удовлетворяет требованиям
Стратегии нагрузочного тестирования Поиск «узкого горла» Оптимизация Сравнение альтернативных вариантов Определение максимального объема данных Чистый интерес
Типы нагрузочного тестирования Нагрузочное тестирование (load testing) Тестирование отказоустойчивости (failover testing) Стресс-тестирование (stress testing) Целевые испытания (targeted infrastructure test) Объемное тестирование (volume testing) Тестирование стабильности (endurance testing) Тестирование производительности (performance testing) Тестирование пропускной способности сети (network sensitivity testing)
Словарь Vuser – виртуальный пользователь Load generator (agent) – генератор нагрузки Process - процесс Thread - поток Run - прогон Ramp-up – «разброс» Load controller – контроллер нагрузки
Схема
Метрики Времена отклика + Построение графиков производительности + Пропускная способность + Надежность (MTBF - Mean Time Between Failures) Доступность (какой процент времени сервис лежал) Загрузка процессора Загрузка памяти Сетевой траффик + Особые показатели сервера приложений Особые показатели сервера баз данных Запросы в секунду +
Что нужно знать о каждой метрике? Среднее значение Разброс Максимальное и минимальное достигнутое значение Перцентиль (уложившиеся около среднего 90% результатов) Все распределение Упавшие запросы (процент)
The Grinder 100% Java (любая ОС с поддержкой J2SE) Протоколы HTTP, HTTPS (out of the box) SOAP, XML-RPC IIOP, RMI/IIOP, RMI/JRMP, and JMS. POP3, SMTP, FTP, and LDAP. Базы данных – JDBC Скрипт на Jython / Автозапись HTTP GrinderStone for Eclipse - дебаггинг Бесплатный
The Grinder: Настройка среды Java (JVM) Jython (add to PATH) Add external JARs to Grinder /lib/
Схема нагрузочного тестирования
The Grider: Property File
grinder.processes grinder.threads grinder.runs grinder.processIncrement grinder.processIncrementInterval grinder.initialProcesses grinder.duration grinder.script grinder.initialSleepTime grinder.sleepTimeVariation grinder.sleepTimeFactor
The Grinder: UI
Workflow: Запись скрипта
Пример скрипта
Jython an implementation of the Python programming language written in JavaPython programming languageJava Python Syntax + ability to use Java classes Python написанный на Java, т.е. с возможностью использовать синтаксис Python и библиотеки Java
Содержимое скрипта Импорт Java библиотек Определение переменных (HTTP headers/connection settings) Определение прокси-объектов для Test Группировка отдельных тестов в функции Test group Вызов каждой тестовой функции из главной функции __call__(self)
Пример лог файла
Grinder Analyzer Специальный питоновский скрипт для анализа логов, записанных с помощью Grinder HTTP Plugin необходима установка Jython/Python
Пример отчета
Вопросы? End