Нагрузочное тестирование 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.
Формирование GET-запроса
Указывается конкретный endpoint и его тип.
Извлечение данных из тела ответа
Зачастую требуется извлечь какие-то данные из тела ответа запроса.
Для этого можно использовать JSON Path PostProcessor.
Формирование POST-запроса
Указывается конкретный endpoint и его тип.
Задаётся содержимое тела запроса.
Response Assertion
Не все запросы, закончившиеся с кодом состояния,
отличным от 2**, являются признаками проблемы!
Формирование последовательности
Вышеописанными способами создаются все запросы,
необходимые для сценария, имитирующего работу пользователя.
Давайте зададим количество одновременных пользователей,
определив количество потоков:
Задаём уровень нагрузки
Throughput Shaping Timer позволяет гибко задать уровень
RpS и продолжительность воздействия нагрузки.
Запуск теста и анализ результатов
Для анализа результатов теста
JMeter предоставляет множество
удобных инструментов.
Рассмотрим их далее.
Из отдельных запросов
собирается тестовый
сценарий.
View Results Tree
Компонент позволяет увидеть
всю цепочку запросов
и проанализировать детали
каждого из них.
View Results in Table
Компонент позволяет
просмотреть результаты
в виде таблицы и получить
основную информацию
по каждому отдельному
запросу.
Hits per Seconds
Компонент позволяет
просмотреть результаты
в виде графика RpS/Time.
Aggregate Report
Один из наиболее интересных компонентов.
Позволяет увидеть время выполнения каждого типа запросов и общую
пропускную способность сервера при текущем уровне нагрузки.
Проект готов ко взлёту!
Узкие места найдены, разработчики заняты рефакторингом, DevOps-ы
оптимизируют инфраструктуру. Ещё немного, и производительность
взлетит! Наверное 
Спасибо за внимание!
Вячеслав Марков, инженер по
автоматизированному тестированию
Email: vmarkov@distillery.com
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

Нагрузочное тестирование API. Как летать, а не ползать?

  • 1.
    Нагрузочное тестирование API. Каклетать, а не ползать? Вячеслав Марков, QA automation engineer, Distillery QA Meetup 2017
  • 2.
    Что же этотакое? Нагрузочное тестирование – подвид тестирования производительности. Основные задачи нагрузочного тестирования: — Определение соответствия системы предъявляемым требованиям — Определение скорости отклика системы на внешние воздействие — Определение максимального количества одновременных пользователей — Нахождение «узких» мест системы
  • 3.
    Тестирование REST API RESTAPI – популярный архитектурный стиль построения взаимодействия компонентов сетевого приложения — Реальные запросы от клиентов к серверу — Реалистичная последовательность запросов — Анализ времени обработки — Определение пропускной способность сервера (RpS) — Определение стабильность работы сервера — Проверка корректности поведения при превышении расчётной нагрузки
  • 4.
    Создаём реалистичный сценарий Нужноизучить клиентское приложение! Повторите последовательность действий типичного пользователя и посмотрите, каким образом Ваше приложение взаимодействует с сервером. Web-приложение: Исследование последовательности и частоты запросов с помощью инструментов разработчика Мобильное приложение: Исследование трафика с помощью снифферов (Whireshark, Charles…)
  • 5.
    Инструменты для нагрузочноготестирования — IBM Rational Performance Tester — SmartBear Web Load Testing — Яндекс.Танк — Apache Jmeter …и многие другие
  • 6.
    Почему 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)  Бесплатный!
  • 7.
    Какие компоненты понадобятся? HTTP Request Defaults  HTTP Header Manager  HTTP Request  JSON Path PostProcessor  Throughput Shaping Timer  Response Assertion  CSV Dataset Config Давайте построим тестовую последовательность запросов. Нам наверняка понадобятся некоторые компоненты JMeter:
  • 8.
    HTTP Request Defaults Компонентпозволяет задать общие для всех запросов установки — адрес хоста, тайм-ауты, протоколы.
  • 9.
    HTTP Header Manager Компонентпозволяет задать HTTP-хедеры для запросов. Может быть применён как ко всей группе запросов, так и к каждому в отдельности.
  • 10.
    CSV Data SetConfig Константы (например, авторизационные данные) можно вынести во внешний файл и затем извлекать их во время выполнения теста.
  • 11.
    DNS Cache Manager Дляповышения реалистичности тестового воздействия можно использовать DNS Cache Manager.
  • 12.
  • 13.
    Извлечение данных изтела ответа Зачастую требуется извлечь какие-то данные из тела ответа запроса. Для этого можно использовать JSON Path PostProcessor.
  • 14.
    Формирование POST-запроса Указывается конкретныйendpoint и его тип. Задаётся содержимое тела запроса.
  • 15.
    Response Assertion Не всезапросы, закончившиеся с кодом состояния, отличным от 2**, являются признаками проблемы!
  • 16.
    Формирование последовательности Вышеописанными способамисоздаются все запросы, необходимые для сценария, имитирующего работу пользователя. Давайте зададим количество одновременных пользователей, определив количество потоков:
  • 17.
    Задаём уровень нагрузки ThroughputShaping Timer позволяет гибко задать уровень RpS и продолжительность воздействия нагрузки.
  • 18.
    Запуск теста ианализ результатов Для анализа результатов теста JMeter предоставляет множество удобных инструментов. Рассмотрим их далее. Из отдельных запросов собирается тестовый сценарий.
  • 19.
    View Results Tree Компонентпозволяет увидеть всю цепочку запросов и проанализировать детали каждого из них.
  • 20.
    View Results inTable Компонент позволяет просмотреть результаты в виде таблицы и получить основную информацию по каждому отдельному запросу.
  • 21.
    Hits per Seconds Компонентпозволяет просмотреть результаты в виде графика RpS/Time.
  • 22.
    Aggregate Report Один изнаиболее интересных компонентов. Позволяет увидеть время выполнения каждого типа запросов и общую пропускную способность сервера при текущем уровне нагрузки.
  • 23.
    Проект готов ковзлёту! Узкие места найдены, разработчики заняты рефакторингом, DevOps-ы оптимизируют инфраструктуру. Ещё немного, и производительность взлетит! Наверное 
  • 24.
    Спасибо за внимание! ВячеславМарков, инженер по автоматизированному тестированию Email: vmarkov@distillery.com VK: https://vk.com/markov_tgn
  • 25.
    Присоединяйтесь к нашейкоманде! 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