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

25
Нагрузочное тестирование API. Как летать, а не ползать? Вячеслав Марков, QA automation engineer, Distillery QA Meetup 2017

Upload: it61

Post on 11-Apr-2017

54 views

Category:

Software


7 download

TRANSCRIPT

Нагрузочное тестирование 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: [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