Особенности — Типы и виды — Протоколы — Цели — Компоненты HTTP — Методы HTTP — PUT и POST — Статус-коды — Инструменты — Методы аутентификации — SOAP, REST и разница между ними — Шаблоны документации — Примеры API которыми пользуются все — Проблемы — Баги
Что такое тестирование API?
Подтип тестирования, нацеленный на программный интерфейс приложений (API). Тестирование API проверяет, соответствует ли API приложения требованиям по функциональности, производительности, безопасности, и другим.
Какие отличительные характеристики тестирования API по сравнению с другими типами?
- Тестирование без GUI. В этом свой позитив, поскольку это дает ранний инсайт проблем с приложением, что позволяет разработчиками убрать их еще до того как они проявятся на уровне интерфейса (то есть пользователя).
- Тестируется ключевая функциональность на глубоком уровне, что позволяет на раннем этапе оценить общее качество билда; ошибки устраняют на базовом уровне, не пропуская на высшие уровни. Тестирование обычно идет параллельно с разработкой.
- Экономия времени — тестирование API забирает меньше времени, чем тестирование интерфейса. Для API-тестов нужно меньше кода, и в целом меньше рутинных операций.
- Языки. В тестировании API для передачи данных применяются XML или JSON, поэтому процессы не зависят от языка программирования — может применяться любой.
Какие протоколы применяются при тестировании API?
- HTTP
- REST
- SOAP
- JMS
- UDDI
Опишите основные отличия между тестированием API и GUI.
Тестирование API направлено на бизнес-логику, передачу данных, безопасность, и производительность. Тестирование интерфейса проверяет «вид и ощущения» от продукта, вплоть до размещения и удобства кнопок, форм и т.п.
Что верифицируют в процессе тестирования API?
- Корректность передачи данных
- Статус-коды HTTP
- Время отклика (response time)
- Коды ошибок, если API возвращает ошибки
- Авторизацию
- Нефункциональное тестирование, в частности производительность и безопасность
Опишите компоненты HTTP-запроса.
HTTP-запрос состоит из пяти элементов:
- HTTP-метод, задающий действие.
- URI, идентификатор ресурса на сервере.
- Версия HTTP
- Заголовок запроса, содержащий метаданные в формате ключ:значение; тип клиента (браузера), поддержка форматов, форматы тела запроса, настройки кэша и прочее.
- Тело запроса, с данными, передаваемыми клиентом в API.
Какие HTTP-методы часто применяются в REST API?
Методы, выполняющие так называемые CRUD-операции:
- GET, метод чтения данных из ресурса
- POST, метод для создания (или обновления) ресурсов
- PUT, изменяющий существующий ресурс
- DELETE, удаляющий указанный ресурс
Расскажите об отличиях между PUT и POST.
- Если нужно изменить один ресурс, являющийся компонентом коллекции ресурсов, вызывается метод PUT. Если нужно добавить дочерний ресурс в коллекцию, используется POST.
- Если PUT-запрос отправлен много раз, результат будет тем же. Если POST-запрос отправлен много раз, результаты будут отличаться, то есть при каждом запросе будет создан ресурс, или возвращена ошибка
Например, если есть ресурс создания и обновления пользовательских экаунтов, отправка одного и того же PUT-метода будет каждый раз обновлять пользователя. Отправка одинакового POST-метода много раз создаст много экаунтов, или вернет ошибки «такой юзернейм-почта уже зарегистрированы».
Опишите статус-коды HTTP-ответа, по классам
(Частый вопрос, без которого не обходится ни одно собеседование 100%). Итак,
- 1хх: категория «информационных» ответов. Клиент должен продолжать запрос, или игнорировать, если запрос завершен.
- 2хх: успешный запрос.
- 3хх: редирект-ответы (перенаправления), возможны несколько ответов, один из них должен быть выбран браузером или пользователем.
- 4хх: ошибка на стороне клиента. Сервер не смог обработать запрос и передает ошибку клиенту. Некорректный URL, некорректный синтаксис и так далее.
- 5хх: ошибка на стороне сервера — невозможно обработать запрос.
Распространенные инструменты тестирования API
Также очень частый вопрос. Инструменты: во первых, Postman. Это неформальный стандарт в тестировании API, по крайней мере в России. Далее можно назвать SoapUI (здесь отдельный большой гайд), и Swagger и Katalon. Разумеется, неплохо бы иметь опыт работы с этими инструментами, хотя бы базовый, но очень желательно коммерческий.
Вопросы на собеседовании — Postman
Postman — большой гайд для начинающих
Также Тестирование производительности API в K6
Какие применяются методы аутентификации при тестировании API?
- Через сессии/cookies
- Базовая аутентификация
- Дайджест-аутентификация
- OAuth
В чем разница между аутентификацией и авторизацией?
Аутентификация — это процесс подтверждения идентичности пользователя; авторизация — процесс подтверждения прав на уровень доступа.
Почему тесты API лучше автоматизируются, чем тесты UI?
Хорошей практикой тестирования является классическая тестовая пирамида, в которой сквозные (e2e) UI-тесты должны быть на верхушке пирамиды (то есть в последнюю очередь), и их должно быть сравнительно мало; поскольку автотесты UI весьма трудозатратные и часто нестабильные из-за множества программных зависимостей, проявляющихся на этом высоком уровне. Автотесты API находятся на среднем уровне пирамиды, как часть интеграционного тестирования, они намного быстрее и более надежные, контролируемые.
Опишите отличия между тестированием API и модульным (юнит-) тестированием
Юнит-тестирование проходит по методике белого ящика, API — обычно черного ящика. Юнит-тестирование имеет дело с небольшими модулями и компонентами и сравнительно проще; тестирование API намного более сложный процесс.
Какие типы и виды тестирования применяются при тестировании API?
- Функциональное тестирование: бОльшая часть тестов API касается именно функциональности приложения, того что приложение должно делать (функциональные тест-кейсы).
- Ручное тестирование: хотя API-тесты сейчас в значительной мере автоматизируются, это не значит что вообще нет ручных тестов, например в Postman.
- Автоматизированное тестирование: тест-кейсы API автоматизируются, применяются соответствующие фреймворки.
- Нагрузочное тестирование: эмулируется трафик на API и изучаются проблемные места; без этого бывает сложно предугадать, какие проблемы с API могут возникнуть при большой нагрузке. Применяются инструменты (чаще всего JMeter), отправляющие HTTP-запросы на эндпойнты API и измеряющие время ответа, количество ошибок и другие метрики.
- Тестирование безопасности: проверка защищенности API от внешних угроз, верификация надежности шифрования, и в целом устойчивость архитектуры API; также контроль уровней доступа и деталей авторизации.
- В частности, тестирование на проникновение (пентест API): специалисты по безопасности, незнакомые с этим API, пытаются оценить устойчивость, симулируя поведение злоумышленника.
Какие стили архитектуры применяются при создании Web API?
- Simple URI в качестве адреса сервиса
- Stateless-коммуникация
- HTTP для клиент-серверной коммуникации
- XML/JSON как язык форматирования
Опишите тестовое окружение API
Так как нет GUI-интерфейса, применяется более сложный подход: определенная конфигурация сервера и БД. В процессе тестирования подаются параметры оригинального окружения через API-вызовы, и проверяются результаты.
В чем разница между API и веб-сервисами?
Веб-сервисы:
- Все веб-сервисы это API
- Все веб-сервисы должны быть доступны по HTTP
- Веб-сервис имеет только три способа коммуникации: SOAP, REST, XML-RPC
- Веб-сервису для функционирования всегда нужно подключение к интернету
В то время как API:
- Не все API являются веб-сервисами
- Не всем API нужна доступность по HTTP
- API имеет много способов коммуникации, например через DLL-файлы в C++, Jar-файлы/RMI в Java, прерывания в Linux Kernel API и пр.
- API не обязательно нужно интернет-подключение
Что такое SOAP?
Буквально «простой протокол доступа к объектам», протокол обмена структурированными сообщениями на основе XML.
Что такое REST API?
REST — буквально «передача самоописываемого состояния», стиль взаимодействия распределенного приложения в сети. REST API — набор функций для создания и выполнения запросов и получения ответов по HTTP.
В чем разница между SOAP и REST?
SOAP:
- Протокол, по которому компьютеры коммуницируют между собой, используя XML
- SOAP поддерживает только XML
- SOAP не поддерживает кэширование
- SOAP медленнее чем REST
- SOAP работает через HTTP, но «вкладывает сообщение в конверт»
В то время как REST:
- REST это тип архитектуры сервисов для сетевых приложений
- Поддерживает много форматов
- Поддерживает кэширование
- Быстрее чем SOAP
- REST-клиент похож на браузер по функциям и применяет стандартные методы
- REST использует HTTP-заголовки
Какие знаете шаблоны документации API?
- Swagger
- FlatDoc
- RestDoc
- API blueprint
- Slate
- Miredot
- Web service API Specification.
Какие знаете известные примеры API? Например публичных сервисов.
- Google Maps API
- YouTube
- Amazon Advertising API
Какие сложности возникали при тестировании API на прежней работе?
Самые распространенные проблемы с API:
- Выбрать нужные параметры и их комбинации
- Присвоить правильные категории параметрам
- Правильный порядок API-запросов
- Верификация и валидация ответов
- Нет GUI, сложно подавать и контролировать входные значения
Какие баги чаще всего возникают при тестировании API, по опыту предыдущей работы?
- Баги с производительностью, стабильностью и надежностью
- Дублированная или отсутствующая функциональность
- Некорректная коммуникация
- Баги в многопотоковых приложениях
***
Судя по всему, бизнес-аналитиком стать проще, чем стажером в QA