Нагрузочное тестирование API.
Как летать, а не ползать?
Вячеслав Марков,
QA automation engineer, Distillery
QA Meetup 2017
Что же это такое?
Нагрузочное тестирование – подвид тестирования производительности.
Основные задачи нагрузочного
тестирования:
—Определение соответствия системы
предъявляемым требованиям
—Определение скорости отклика
системы на внешние воздействие
—Определение максимального
количества одновременных
пользователей
—Нахождение «узких» мест системы
Тестирование REST API
REST API – популярный архитектурный стиль построения взаимодействия
компонентов сетевого приложения
— Реальные запросы от клиентов к серверу
— Реалистичная последовательность запросов
— Анализ времени обработки
— Определение пропускной способность сервера (RpS)
— Определение стабильность работы сервера
— Проверка корректности поведения при превышении расчётной нагрузки
Создаём реалистичный сценарий
Нужно изучить клиентское приложение!
Повторите последовательность действий типичного пользователя и посмотрите,
каким образом Ваше приложение взаимодействует с сервером.
Web-приложение:
Исследование последовательности и
частоты запросов с помощью
инструментов разработчика
Мобильное приложение:
Исследование трафика с помощью
снифферов (Whireshark, Charles…)
Инструменты для нагрузочного тестирования
— IBM Rational Performance Tester
— SmartBear Web Load Testing
— Яндекс.Танк
— Apache Jmeter
…и многие другие
Почему JMeter?
Умеет многое:
— Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
— SOAP / REST Webservices
— FTP
— Database via JDBC
— LDAP
— Message-oriented middleware (MOM) via JMS
— Mail - SMTP(S), POP3(S) and IMAP(S)
— Native commands or shell scripts
— TCP
— Java Objects
Имеет как графический, так и консольный интерфейсы
Кроссплатформенный (написан на Java)
Бесплатный!
Какие компоненты понадобятся?
HTTP Request Defaults
HTTP Header Manager
HTTP Request
JSON Path PostProcessor
Throughput Shaping Timer
Response Assertion
CSV Dataset Config
Давайте построим тестовую последовательность запросов. Нам
наверняка понадобятся некоторые компоненты JMeter:
HTTP Request Defaults
Компонент позволяет задать общие для всех запросов
установки — адрес хоста, тайм-ауты, протоколы.
HTTP Header Manager
Компонент позволяет задать HTTP-хедеры для запросов. Может быть
применён как ко всей группе запросов, так и к каждому в отдельности.
CSV Data Set Config
Константы (например, авторизационные данные) можно вынести во
внешний файл и затем извлекать их во время выполнения теста.
DNS Cache Manager
Для повышения реалистичности тестового воздействия
можно использовать DNS Cache Manager.
Извлечение данных из тела ответа
Зачастую требуется извлечь какие-то данные из тела ответа запроса.
Для этого можно использовать JSON Path PostProcessor.
Формирование POST-запроса
Указывается конкретный endpoint и его тип.
Задаётся содержимое тела запроса.
Response Assertion
Не все запросы, закончившиеся с кодом состояния,
отличным от 2**, являются признаками проблемы!
Формирование последовательности
Вышеописанными способами создаются все запросы,
необходимые для сценария, имитирующего работу пользователя.
Давайте зададим количество одновременных пользователей,
определив количество потоков:
Задаём уровень нагрузки
Throughput Shaping Timer позволяет гибко задать уровень
RpS и продолжительность воздействия нагрузки.
Запуск теста и анализ результатов
Для анализа результатов теста
JMeter предоставляет множество
удобных инструментов.
Рассмотрим их далее.
Из отдельных запросов
собирается тестовый
сценарий.
View Results Tree
Компонент позволяет увидеть
всю цепочку запросов
и проанализировать детали
каждого из них.
View Results in Table
Компонент позволяет
просмотреть результаты
в виде таблицы и получить
основную информацию
по каждому отдельному
запросу.
Aggregate Report
Один из наиболее интересных компонентов.
Позволяет увидеть время выполнения каждого типа запросов и общую
пропускную способность сервера при текущем уровне нагрузки.
Проект готов ко взлёту!
Узкие места найдены, разработчики заняты рефакторингом, DevOps-ы
оптимизируют инфраструктуру. Ещё немного, и производительность
взлетит! Наверное
Спасибо за внимание!
Вячеслав Марков, инженер по
автоматизированному тестированию
Email: [email protected]
VK: https://vk.com/markov_tgn
Присоединяйтесь к нашей команде!
https://new.vk.com/distillerytech
https://www.instagram.com/distillery_tech
https://www.facebook.com/DistilleryTech
https://www.facebook.com/DistilleryTechRussia
https://hh.ru/employer/2406373
distillery.com
Top Related