Что такое API-тестирование?
Тестирование API – это вид тестирования ПО, в ходе которого анализируется программный интерфейс приложения (API) на предмет соответствия его ожидаемой функциональности, безопасности, производительности и надежности. Тестируется непосредственно API или проводится интеграционное тестирование.
API – это код, обеспечивающий коммуникацию и обмен данными между двумя программами. Приложение обычно состоит из нескольких уровней, включая API. Уровни API направлены на бизнес-логику приложений, определяя запросы, способы их выполнения и используемые форматы данных.
Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туторилов, задач по автоматизации и книг по QA.
В отличие от тестирования пользовательского интерфейса (UI), которое направлено на проверку внешнего вида приложения, тестирование API ориентировано на анализ бизнес-логики приложения, его безопасности и данных, которые получает пользователь. Тестирование API выполняется путем отправки запросов к одной или нескольким конечным точкам API и сравнения полученных ответов с ожидаемыми результатами.
Тестирование API часто автоматизируется и используется командой разработчиков для осуществления непрерывного тестирования. Оно обычно выполняется путем отправки команд непосредственно тестируемому ПО, используя программные интерфейсы приложения.
Как подойти к тестированию API
Процесс тестирования API начинается с четкого определения области применения программы, а также с полного понимания принципов работы API. Для этого необходимо ответить на следующие вопросы:
- Какую функцию выполняет API?
- Какие конечные точки доступны для тестирования?
- Ожидаемый код ответов при успешных запросах?
- Ожидаемый код ответов при неудачных запросах?
- Какое сообщение об ошибке должно появиться в теле неудачного запроса?
- Какие инструменты тестирования API следует использовать?
Получив ответы на эти и другие вопросы, тестировщики могут приступить к применению различных методик тестирования и, при необходимости, к написанию кода для проверки API.
Тест-кейсы, написанные для тестирования API, должны определять условия или переменные, с помощью которых тестировщики могут проверить, реагирует ли конкретная система должным образом и правильно ли она работает. После того как тест-кейсы определены, тестировщики могут приступить к их выполнению для проверки соответствия фактического и ожидаемого результатов. Тесты анализируют такие ответы, как:
- Время ответа на запрос.
- Качество данных.
- Подтверждение авторизации.
- Коды состояния протокола передачи гипертекста (HTTP).
- Коды ошибок.
В процессе тестирования API анализируется несколько конечных точек, таких как веб-сервисы и базы данных. Тестировщики должны следить за сбоями или неожиданными результатами. Время ответа должно находиться в определенных пределах, которые команда считает приемлемыми, а сам API должен быть защищен от возможных атак.
Тесты также должны быть написаны, чтобы убедиться, что пользователи не могут повлиять на приложение неожиданным образом, что API может справиться с ожидаемой пользовательской нагрузкой и что API может работать в различных браузерах и устройствах. В ходе тестирования должны быть проанализированы результаты нефункциональных тестов, в том числе производительности и безопасности.
Типы API тестирования
Для проверки корректности работы API могут быть выполнены различные виды тестов. Тесты варьируются от общего до специального анализа ПО.
1. Тесты валидации
Тесты валидации анализируют API на основе трех отдельных критериев: удобство использования API как продукта, его транзакционное поведение и эффективность его работы. Вот некоторые типичные вопросы, задаваемые при выполнении таких тестов:
- Соответствует ли разработанный API целям продукта, решает ли проблемы, которые должен?
- Есть ли серьезные ошибки в коде, которые могут нарушить работу API?
- Обеспечивает ли API доступ к данным в соответствии с установленной политикой?
- Хранит ли API данные в соответствии с правилами безопасности или нормативными требованиями?
- Могут ли какие-либо изменения в коде улучшить общую функциональность API?
2. Функциональные тесты
Функциональное тестирование позволяет убедиться, что API работает именно так, как должен. При этом анализируются конкретные функции в кодовой базе, чтобы гарантировать, что API функционирует в рамках ожидаемых параметров и может справиться с ошибками, если результаты выходят за пределы заданных параметров.
3. Нагрузочное тестирование
Используется для определения количества вызовов, которое может выдержать API. Нагрузочное тестирование часто выполняется после завершения работы над конкретным модулем или кодовой базой, чтобы определить, может ли теоретическое решение работать как практическое, действуя под заданной нагрузкой.
4. Тестирование надёжности
Тестирование надёжности позволяет убедиться, что API может выдавать стабильные результаты, а связь между платформами надежна.
5. Тестирование безопасности
При тестировании безопасности проверяются методы шифрования, используемые в API, а также схема управления доступом. Оно включает в себя проверку авторизации для доступа к ресурсам и управление правами пользователей.
6. Тестирование на проникновение
Тестирование на проникновение основано на тестировании безопасности. При этом типе тестирования API атакуется человеком, имеющим ограниченные знания о программном обеспечении или не имеющим их вовсе. Это позволяет тестировщикам проанализировать вектор атаки с точки зрения злоумышленника. Такие атаки могут быть ограничены конкретными элементами или нацелены на API целиком.
7. Тестирование на случайный данных (Fuzz testing)
При этом тестировании в систему принудительно вводится огромное количество случайных данных, называемых шумом или “fuzz”, с целью создания негативного поведения, например, принудительного сбоя или переполнения данными.
8. Модульное тестирование
Во время этого тестирования различные модули приложения (units) проверяются по отдельности, независимо друг от друга, на предмет корректной работы. Процесс модульного тестирования API включает в себя тестирование отдельных конечных точек с помощью одного запроса.
9. Интеграционное тестирование
Интеграционные тесты – это вид тестирования ПО, при котором различные блоки, модули или компоненты приложения тестируются как единое целое. Поскольку API используются для взаимодействия двух или более частей программного обеспечения, такой тест анализирует, как API интегрирует программное обеспечение.
Важность тестирования API
Тесты пользовательского интерфейса (UI-тесты) часто оказываются неэффективными для проверки функциональности API-сервисов и не охватывают всех необходимых аспектов тестирования внутреннего интерфейса (back-end). Это может привести к тому, что ошибки останутся на уровне сервера или модуля – это дорогостоящие ошибки, которые могут значительно задержать выпуск продукта и потребовать изменения большого объема кода.
Тестирование API позволяет разработчикам начать тестирование на ранних этапах цикла разработки еще до того, как будет готов пользовательский интерфейс. Любой запрос, который не дает соответствующего значения на серверном уровне, не будет отображаться и на пользовательском уровне. Это позволяет разработчикам устранить по крайней мере половину существующих ошибок до того, как они превратятся в более серьезные проблемы. Кроме того, это позволяет тестировщикам выполнять запросы, которые не могут быть выполнены через пользовательский интерфейс, что необходимо для выявления дефектов безопасности.
Многие компании используют микросервисы для своих программных приложений, так как они позволяют более эффективно развертывать программное обеспечение. Если одна часть приложения обновляется, другие продолжают работать без перебоев. Каждый раздел приложения имеет отдельное хранилище данных и свои команды для взаимодействия с ним. Большинство микросервисов используют API. По мере распространения микросервисов, тестирование API становится более важной задачей, чтобы обеспечить корректность работы всех компонентов.
Тестирование API также является неотъемлемой частью Agile разработки ПО, где необходима мгновенная обратная связь. В Agile-среде модульное тестирование и API-тесты предпочтительнее тестов графического интерфейса пользователя (GUI), поскольку они просты в сопровождении и более эффективны. Тесты GUI часто требуют постоянной доработки, если они хотят успевать за частыми изменениями в Agile-среде.
В целом, включение API-тестов в процесс разработки, принесет пользу командам инженеров и разработчиков на протяжении всего жизненного цикла разработки. Эти преимущества затем передаются заказчикам в виде улучшенных услуг и программных продуктов.
Преимущества тестирования API
Тестирование API гарантирует надежность, безопасность и масштабируемость соединений между платформами. Конкретные преимущества включают:
- Автоматизация API-тестирования требует меньше кода, чем автоматизированные GUI-тесты, что позволяет ускорить тестирование и снизить общую стоимость.
- Тестирование API позволяет разработчикам получить доступ к приложению без пользовательского интерфейса, что помогает тестировщикам выявлять ошибки на более ранних этапах жизненного цикла разработки, а не ждать, пока они перерастут в более серьезные проблемы. Это позволяет сэкономить деньги,поскольку устранение ошибок более эффективно на ранней стадии.
- API-тесты не зависят от технологии и языка. Обмен данными осуществляется с помощью JavaScript Object Notation или Extensible Markup Language и содержит HTTP-запросы и ответы.
- При анализе приложений API-тесты используют экстремальные условия и входные данные. Это позволяет устранить уязвимости и защитить приложение от вредоносного кода и сбоев.
- API-тесты могут быть интегрированы с GUI-тестами. Такая интеграция позволяет создавать новых пользователей в приложении до проведения GUI-теста.
Трудности тестирования API
Несмотря на то что тестирование API обладает определенными преимуществами, оно также связано с трудностями.
Наиболее распространенными ограничениями при тестировании API являются выбор параметров, комбинации параметров и последовательность вызовов:
- Для выбора параметров необходимо проверить параметры, которые передаются через API-запросы – это может оказаться непростой задачей. Однако необходимо удостовериться, что все данные параметров соответствуют критериям проверки, таким как использование соответствующих строковых и числовых данных, заданный диапазон значений и соблюдение ограничений по длине.
- Комбинирование параметров может быть сложной задачей, поскольку каждая комбинация должна быть протестирована на предмет наличия проблем, связанных с конкретными конфигурациями.
- Последовательность вызовов также представляет собой сложную задачу, поскольку каждый вызов должен появляться в определенном порядке, чтобы обеспечить правильную работу системы. Это может стать проблемой, особенно при работе с многопоточными приложениями.
К другим проблемам тестирования API относятся:
- Отсутствие графических интерфейсов при проверке, что усложняет процесс представления входных данных.
- Тестировщики должны уметь писать код.
- Каждый API может работать при модульном тестировании, но не работать совместно с остальными при тестировании всего приложения.
- Программа может работать некорректно, если при тестировании не были учтены зависимости API.
Инструменты для тестирования API
При проведении тестирования API разработчики могут либо написать собственный фреймворк, либо выбрать один из множества инструментов для тестирования. Создание фреймворка для API-тестирования позволяет разработчикам индивидуализировать тест, поскольку они не ограничены возможностями конкретного инструмента и его плагинов. Тестировщики могут добавлять любые библиотеки, которые они считают подходящими для выбранной платформы кодирования, создавать уникальные стандарты отчетности и включать в тесты сложную логику. Тем не менее, если тестировщик решит разработать собственный фреймворк, ему потребуются навыки написания кода.
Инструменты тестирования API предоставляют удобные интерфейсы с минимальными требованиями к кодированию, что позволяет проводить тесты менее опытным разработчикам. К сожалению, такие инструменты часто предназначены для анализа общих проблем API, а более специфичные проблемы могут остаться незамеченными.
Существует большое количество инструментов для тестирования API – от платных до предложений с открытым исходным кодом. По оценкам, к 2030 году объем мирового рынка API-тестирования достигнет 4 млрд долларов. Среди конкретных примеров платформ для тестирования API можно выделить Accelq, Apache JMeter, Apigee, Assertible, Insomnia, Katalon, Postman, ReadyAPI, REST Assured, SoapUI и Swagger UI.
В качестве примера рассмотрим Apache JMeter – бесплатное Java-приложение с открытым исходным кодом, работающее на Windows, Linux или macOS. Этот инструмент не требует навыков программирования и может работать с различными типами приложений, серверов и протоколов. JMeter позволяет использовать файлы значений, разделенных запятыми, для создания реалистичного трафика, чтобы подвергнуть API нагрузке. Интеграция JMeter с Jenkins позволяет администраторам встраивать тестирование API в конвейеры непрерывной интеграции/непрерывной доставки (CI/CD) и использовать JMeter для мониторинга API.
Аналогичным образом, инструмент Apigee, входящий в состав Google Cloud, поддерживает проектирование, создание, тестирование, развертывание и мониторинг API, позволяя разработчикам отслеживать трафик, количество ошибок и время отклика. Пользователи размещают свои API в Apigee с помощью API-прокси, которые отделяют API, предназначенные для приложений, от внутренних сервисов, так что приложения могут продолжать обращаться к API без перерыва, несмотря на любые изменения кода на внутреннем уровне.
Распространенные ошибки, которые можно выявить при тестировании API
Тестирование API, как правило, позволяет обнаружить следующие ошибки в программном обеспечении:
- Проблемы с надежностью API.
- Время ответа API.
- Дублирование функциональности.
- Превышение лимита запросов.
- Несовместимые механизмы обработки ошибок.
- Некорректные ошибки и предупреждения.
- Некорректно структурированные данные ответа.
- Отсутствие функциональности.
- Проблемы с многопоточностью.
- Проблемы с безопасностью.
- Неиспользуемые флаги.
Примеры тестирования API
Хотя вариантов использования тестирования API бесконечное множество, приведем два примера тестов, которые гарантируют, что API выдает корректные результаты.
Когда пользователь открывает приложение для социальных сетей, например Twitter или Instagram, ему предлагается войти в систему. Это может быть сделано в самом приложении или через третью сторону, например Google или Facebook, что подразумевает наличие у приложения существующего соглашения с Google и Facebook на доступ к некоторой информации о пользователе, уже переданной этим двум источникам.
В этом случае разработчики должны провести тестирование API, чтобы убедиться, что приложения социальных сетей могут взаимодействовать с Google и Facebook для получения необходимой информации, которая предоставит пользователю доступ к приложению.
Другой пример – системы бронирования путешествий, такие как Expedia или Kayak. Пользователи ожидают, что самые дешевые варианты перелета на конкретные даты будут доступны и отобразятся им по запросу. Для этого приложение должно взаимодействовать со всеми авиакомпаниями, чтобы найти лучшие варианты перелета, – это делается через API.
В результате разработчики должны провести API-тестирование, чтобы убедиться, что система бронирования путешествий успешно взаимодействует с другими компаниями и выдает пользователям корректные результаты в нужные сроки. Кроме того, если пользователь решил забронировать билет и оплатить его с помощью стороннего платежного сервиса, например PayPal, то API-тесты должны гарантировать, что платежный сервис и система бронирования путешествий могут эффективно взаимодействовать, обрабатывать платеж и обеспечивать безопасность конфиденциальных данных пользователя на протяжении всего процесса.
Лучшие методы тестирования API
Существует множество методов тестирования API, но вот некоторые из наиболее важных:
- Группируйте тест-кейсы по категориям при их определении.
- Включайте в тест-кейс выбранные параметры.
- Разработайте тест-кейсы для всех возможных комбинаций входных данных API.
- Повторно используйте и повторяйте тест-кейсы для мониторинга API в процессе производства.
- Используйте как ручные, так и автоматизированные тесты для получения более надежных и достоверных результатов.
- При тестировании API обращайте внимание на то, что происходит постоянно, а что нет.
- Используйте нагрузочные тесты API для проверки устойчивости системы.
- При тестировании на наличие сбоев следует тестировать API таким образом, чтобы он постоянно давал сбой. Это позволит изолировать проблему.
- Выполняйте последовательность вызовов, имея четкий план.
- Выставление приоритетов вызова функций API позволит облегчить процесс тестирования.
- Используйте понятную документацию и максимально автоматизируйте процесс документирования.
- По возможности делайте каждый тест-кейс самодостаточным и отдельным от зависимостей.
Ознакомьтесь с 10 различными инструментами тестирования безопасности API, в том числе с Apache JMeter, Apigee и Insomnia.
Перевод статьи «API testing».
Пингбэк: Тестирование API в Cypress