Тестирование производительности
Дата начала ближайшего тренинга
Комментарий тренера о новом курсе.
тренер: Баранцев Алексей
"Младших тестировщиков производительности" не бывает. Зато бывают люди, которые начинают заниматься тестированием производительности.
 (с) Скотт Барбер (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. Построение отчётов
- Как должен выглядеть «понятный» отчёт.
 - Интерпретация и представление результатов.
 - Связывание результатов с целями тестирования и требованиями.
 
