Что такое тестирование API
Сам по себе API (Application programming interface) — это набор правил, по которому две программы либо части одной программы взаимодействуют друг с другом. Его тестирование сводится к проверке корректности выполнения операций внутри API, а также различных аспектов этого взаимодействия: функциональности, производительности, безопасности. Почему API нужно тестировать? Во-первых, часто он — важный компонент системы, который служит связью между другими компонентами. Соответственно, от качества его работы зависит качество всей системы. Во-вторых, API взаимодействует с личными данными, а значит, должен иметь механизмы их защиты. Работу этих механизмов, в свою очередь, нужно тестировать.
Условия, которые нужно соблюдать для написания качественных тестов:
- на вход следует передавать различные данные — корректные и некорректные, пустые значения, значения разных типов и так далее. Так можно воссоздать максимальное количество возможных сценариев, получить больше сведений о правильности работы. Стоит учитывать и другие сценарии: API может использоваться по-разному, например, в мобильном или веб-приложении. Корректность работы в них тоже нужно проверять;
- если есть процессы CI/CD, тестирование лучше интегрировать в них, чтобы постоянно отслеживать поведение API, быстро получать информацию об ошибках и ускорить разработку;
- часто API — цель для атак злоумышленников, поэтому большое внимание уделяется безопасности: проверке методов защиты и шифрования данных, корректности авторизации, аутентификации, обработки токенов.
Кроме того, тестирование можно автоматизировать, в особенности если оно будет повторяться: это сокращает общее время его проведения. У многих инструментов уже есть функции автоматизации.
Типы тестирования API
Рассмотрим основные типы.
- Тестирование методов. Проверяется корректность работы каждого метода API: правильность обработки входных данных, формата ответа, возвращенного кода статуса, работа методов в разных типах запросов.
- Тестирование безопасности. API может содержать конфиденциальные данные (личная, платежная информация и так далее), соответственно, доступ к этой информации должен быть ограничен. Чтобы не допустить проблем с безопасностью, тестировщики ищут уязвимости, которые способны поставить информацию о пользователях под угрозу.
- Тестирование взаимодействий. В одной системе API может работать с другими ее компонентами, сервисами, базами данных и так далее. В связи с этим необходимо проверять корректность взаимодействия: правильность отправки, обработки, получения ответа. Здесь могут создаваться сложные сценарии. Протестировав их, можно говорить о стабильной, согласованной работе всей программы.
- Тестирование обработки ошибок. Этот тип подразумевает проверку работы в ситуациях, когда на вход переданы некорректные данные. Рассматриваются правильность обработки исключений, возвращаемые коды ошибок, сопутствующие им сообщения.
- Тестирование производительности: продолжительность задержек, пропускная способность, изменение этих показателей при резком повышении нагрузки и так далее.
- Тестирование авторизации и аутентификации. Проверяется корректность работы механизмов, уровней доступа (каким пользователям доступны те или иные функции/информация), блокировка доступа по истечении времени сессии.
Таким образом, разные типы тестирования решают разные задачи — например, обеспечение корректной работы или безопасности.
Инструменты тестирования API
Обычно тестировщики используют специализированные инструменты, которые облегчают создание тестов и анализ их результатов:
- Postman — один из самых известных инструментов с удобным интерфейсом. Позволяет создавать автоматизированные тесты, HTTP-запросы, отправлять их и проверять результаты (в том числе с визуализацией), а также интегрироваться с CI/CD. Еще две функции Postman — возможность работать в команде и группировать запросы по коллекциям, если их нужно будет использовать еще раз;
- SoapUI — инструмент, подходящий для проверки работы REST и SOAP API. В SoapUI можно реализовать сценарии для разных типов тестирования, например, методов, безопасности, производительности, отправлять запросы, создавать отчеты о результатах, также есть функции для автоматизации;
- JMeter — инструмент с чуть более сложным интерфейсом, в первую очередь предназначенный для проверки производительности: времени отклика, пропускной способности и тому подобного. Позволяет отправлять запросы, предоставляет отчет о результатах и поддерживает несколько протоколов;
- REST-assured — относительно простая для использования библиотека для Java, позволяющая тестировать REST API с DSL-синтаксисом. Может интегрироваться с фреймворками, например, с JUnit, имеет инструменты для автоматизации и анализа результатов тестов;
- Swagger — инструмент, позволяющий создавать документацию для API и тестировать его. Поддерживаются функции отправки запросов, генерации кода на многих языках программирования, интеграции с CI/CD. Swagger лучше использовать для функционального тестирования, а для нагрузочного выбирать другие инструменты.
Примеры тестирования
Представим API, предназначенный для управления пользователями. У него есть следующие методы:
- GET /users — получить список всех пользователей;
- GET /users/{id} — получить информацию о пользователе с указанным id;
- POST /users — создать нового пользователя;
- PUT /users/{id} — обновить информацию о пользователе с указанным id;
- DELETE /users/{id} — удалить пользователя.
Далее можно следовать алгоритму, приведенному ниже:
- Выяснить из документации, какие поля должны содержать обязательные и необязательные данные о пользователе (имя, фамилия, телефон, электронная почта), каковы форматы этих полей и ожидаемые ответы. Узнать, какие ожидаются коды состояния, например, для GET-запроса — 200 ОК и так далее.
- Затем можно переходить к разработке сценариев. В данном случае это могут быть:
- отправка GET-запроса на /users с целью проверки корректности возвращаемого списка: его структуры и значений;
- создание пользователя, получение его идентификатора, отправка GET-запроса на /users/{id}. Так вы проверяете, вернется ли информация о нужном пользователе;
- отправка GET-запроса на /users/{id} с использованием несуществующего id — проверка, правильно ли API работает с ошибками;
- отправка POST-запроса на /users для контроля работоспособности механизма создания пользователей;
- создание пользователя, удаление его с помощью DELETE и попытка GET-запроса на /users/{id}. Должен быть возвращен код 404 Not Found.
Это лишь часть сценариев, применимых в данном случае.
- Выбор и установка необходимых инструментов: Postman, Swagger и других.
- Выполнение тестов: отправка запросов с помощью выбранного инструмента. На этом же шаге могут создаваться автоматизированные тесты.
- Проверка ответов: возвращаемых форматов данных, правильность структуры и кодов состояния.
- Далее можно провести нагрузочное тестирование (отправка большого количества запросов одновременно, увеличение объемов данных) с использованием, например, JMeter. На этом шаге оценивается скорость работы, иногда выявляются ошибки. Кроме того, проводятся тесты на безопасность.
- Проверка обработки ошибок: отправка запросов с некорректными данными или их форматами, пустых запросов и так далее.
- Анализ результатов, создание отчетов. У большинства инструментов для этого есть встроенные функции. Некоторые способны визуализировать результаты. Ошибки исправляются при необходимости, тесты запускаются повторно (если нужно).
- Интеграция с CI/CD для автоматизации тестов при внесении изменений.
Главное
- Тестирование API — важный и обязательный этап разработки большинства современных систем. Проверяется как правильность выполнения внутренних операций, так и взаимодействие с другими компонентами.
- Существует несколько типов тестирования, каждый из них направлен на решение конкретной задачи.
- Основные инструменты — Postman, SoapUI, JMeter, REST-assured, Swagger.