Тестирование производительности
Дата начала ближайшего тренинга
Комментарий тренера о новом курсе.
тренер: Баранцев Алексей
"Младших тестировщиков производительности" не бывает. Зато бывают люди, которые начинают заниматься тестированием производительности.
(с) Скотт Барбер (aka The Perf Guy)
В тестировании компьютерных программ есть "общедоступная" область функционального тестирования, куда доступ открыт всем желающим, и есть целый ряд областей с достаточно высоким "порогом входа", и тестирование производительности находится в их числе.
Для этого вида тестирования требуется хорошее владение оружием, его голыми руками не возьмёшь. Во-первых, нужно само оружие -- тестирование производительности обязательно требует умения пользоваться специальными инструментами. Во-вторых, нужно тщательно изучить соперника -- необходимо хорошее понимание протоколов взаимодействия тестируемой программы с внешним миром и её внутренней физической и логической архитектуры. Ну и конечно же нужно владеть приёмами -- знать какую нагрузку и как подать на тестируемое приложение, и на что смотреть, чтобы выявить проблемы с производительностью.
На тренинге мы будем учиться обращаться с этим оружием:
- познакомимся с инструментами, предназначенными для генерации нагрузки и для мониторинга различных характеристик производительности,
- освоим способы использования этих инструментов для генерации нагрузки различного вида,
- изучим типовые архитектурные шаблоны построения приложений и связанные с этим источники потенциальных проблем с производительностью,
- рассмотрим способы выявления проблем с производительностью на основе анализа результатов мониторинга.
Для практических демонстраций и для выполнения домашних заданий будет использоваться инструмент JMeter версии 3.
Подробная программа курса:
Занятие 1. Обзор
Модуль 1.1. Введение
- Что такое производительность? Тестирование производительности -- зачем мы его проводим?
- Функциональные и нефункциональные характеристики качества. Производительность + надёжность + удобство использования (дизайн). Скорость и ресурсоёмкость. Уровни изменений: производительность алгоритмов, производительность ПО, производительность человека, использующего ПО.
- Какие ошибки мы можем обнаружить: узкое место («бутылочное горлышко»), медленная подсистема/функция, точки насыщения, функциональные дефекты.
- Ложно-положительные и ложно-отрицательные результаты.
Модуль 1.2. Проектирование тестов
- Сценарий. Запросы (действия, из которых состоит сценарий).
- Профиль нагрузки.
- Задержки.
Модуль 1.3. Выбор инструментов
- Способ описания сценариев.
- Рекордер.
- Генераторы нагрузки.
- Сбор данных.
- Анализ данных.
Модуль 1.4. Примеры инструментов
- Инструменты с декларативным стилем описания сценариев.
- Инструменты с императивным стилем описания сценариев.
- Тестирование клиентской производительности.
- Облачные сервисы.
Модуль 1.5. Пример создания сценариев в JMeter
- Запись сценария рекордером.
- Воспроизведения сценария.
- Отладка и доработка сценария. Использование прокси-серверов для отладки.
- Сбор метрик скорости: время отклика, пропускная способность, количество отказов.
Занятие 2. Сценарии
Модуль 2.1. Протоколы взаимодействия с тестируемой системой
- Сетевые протоколы.
- Удалённые программные интерфейсы (Remote API).
- API, за которыми скрывается что угодно.
Модуль 2.2. Проектирование сценариев
- Моделирование поведения пользователей.
- Что считать – пользователей или запросы?
- Задержки между запросами.
- Управление логикой сценария.
- Как правильно делать login и logout.
- Создание сценариев из переиспользуемых модулей.
Модуль 2.3. Работа с данными в JMeter
- Глобальные параметры (адрес тестового стенда и т.п.)
- Автоподстановка параметров во время записи сценариев.
- Генерация случайных данных.
- Генерация уникальных данных.
- Чтение данных из внешних файлов.
Модуль 2.4. Корреляция данных в JMeter
- Выявление данных, требующих корреляции.
- Экстракторы: регулярные выражения, XPath, CSS Selectors.
Модуль 2.5. Проверки (assertions)
- Функциональные проверки
- Контроль времени отклика
- Таймауты
Занятие 3. Нагрузка
Модуль 3.1. Требования к производительности
- Требования к скорости.
- Требования к надёжности.
- Требования к ресурсоёмкости.
- Требования к окружению.
- Динамические и статические требования.
- Средние значения и аномалии.
Модуль 3.2. Цели тестирования и профили нагрузки
- Анализ требований и определение целей тестирования.
- Что такое модель нагрузки и как она соотносится с целями тестирования.
- Типовые модели нагрузки: на обнаружение какого рода проблем они нацелены.
Модуль 3.3. Реализация типовых моделей нагрузки в JMeter
- Постоянная нагрузка
- Возрастающая нагрузка
- Пиковые нагрузки
Модуль 3.4. Выполнение тестов
- Калибровка сценариев.
- Функциональное тестирование в параллельном режиме.
- Стабилизация показателей и определение базы (baseline).
- Запуск с различными вариациями.
- Что делать во то время, пока выполняются тесты?
Модуль 3.5. Тестирование клиентской производительности
- Встроенные в браузеры средств.
- Плагины к браузерам.
- Прокси-сервера.
- Облачные сервисы.
Занятие 4. Анализ результатов
Модуль 4.1. Подготовка тестового стенда
- Сервера.
- Сеть.
- Виртуальные машины.
- Настройки.
- Фоновая загрузка.
- Генераторы нагрузки.
Модуль 4.2. Сбор данных
- Время отклика, пропускная способность, количество отказов.
- Мониторинг тестируемой системы.
Модуль 4.3. Распределённое тестирование
- Генерация нагрузки из нескольких источников.
- Сбор данных в распределённой среде.
Модуль 4.4. Анализ результатов и построение отчётов
- Встроенные в инструменты средства анализа результатов.
- Специализированные пакеты для статистических расчётов.
Модуль 4.5. Построение отчётов
- Как должен выглядеть «понятный» отчёт.
- Интерпретация и представление результатов.
- Связывание результатов с целями тестирования и требованиями.