API тестирование

26-12-2019

Что такое API?

Аббревиатура расшифровывается как Application Programming Interface, или интерфейс для программирования приложений. Интерфейс, который позволяет разработчикам использовать готовые блоки для построения приложения. Например, Ваш сайт должен показывать пользователю расписание ж/д траспорта или самолётов, или курсы валют , или погоду и т.д. Вам не нужно будет изобретать велосипед, а достаточно только найти подходящий API для ваших целей и брать данные со сторонних веб-приложений используя их API. Например, Github – имеет свой API, которым могут воспользоваться другие разработчики. То, как они будут пользоваться им зависит от возможностей, которые предоставляет API.

Для наглядности, вставьте приведенную ниже ссылку в адресную строку браузера

https://jobs.github.com/positions.json?description=python&location=new+york

Браузер выполнит GET запрос и выдаст вам список результатов поиска вакансий для специалистов по языку python в городе new+york. Изменив значение параметра description или location, вы сможете изменить критерии поиска вакансий.

Вот вам и простой пример работы с Github API.

Что такое API тестирование?

API Testing - это тип тестирования программного обеспечения, который проверяет API. Он сильно отличается от GUI Testing и в основном концентрируется на уровне бизнес-логики архитектуры программного обеспечения. В тестировании API вы используете программное обеспечение для отправки вызовов в API, получения выходных данных и записи ответа системы. Это тестирование не будет сосредоточено на внешнем виде приложения. В выше описанном примере браузер выступал в роли программного обеспечения, отправляющего вызов в API github. В браузере мы и отображали полученные данные. Тестирование API отличается от других типов тестирования программного обеспечения, поскольку графический интерфейс недоступен, и часто вам необходимо настроить начальную среду, которая вызывает API с необходимым набором параметров, а затем, наконец, проверяет результат теста.

Отличия между Unit и API тестированием

Иногда начинающие путают unit и api тестирование, несмотря на то что каждый из них "живёт" на своём уровне (автоматизация и пирамида тестов). Ниже Вы найдёте главные отличия между ними.

Unit тестирование API тестирование
Выполняется разработчиками Выполняется тестировщиками
Тестирует изолированне модули Тестирует фукциональность в стиле End-To-End (E2E)
У разработчика есть доступ к исходному коду Нет доступа к иcходному коду
UI тестирование может быть также вовлечено Тестируются только API функции
Тестируют только базовую функциональность Более широкий диапазон функциональности
Обычно запускаются перед сборкой билда Запускаются после создания билда

Виды тестирования, которые можно выполнять в рамках API тестирования

  1. Usability testing: это тестирование проверяет, является ли API функциональным и удобным для пользователя. И хорошо ли API интегрируется с другой платформой?
  2. Security testing: это тестирование включает в себя, какой тип аутентификации требуется и как зашифрованы конфиденциальные данные
  3. Documentation testing: команда тестирования должна убедиться, что документация адекватна и предоставляет достаточно информации для взаимодействия с API.

Но основным видом тестирования будет "функциональное" тестирование, с использованием всего арсенала методов "чёрноящичного тестирования", где "чёрным ящиком" и будет тестируемый API.

Типы ответов от API

  1. Любой тип данных (в предыдущем примере ответом были данные в формате JSON )
  2. Статус ответа (например, удачно или неудачно был выполнен запрос к API)
  3. Вызов другой фукции API (к примеру, после удаления записи в базе данных через вызов фукции API, автоматически может вызываться другая API функция обновляющая базу данных)

Типы ошибок, которые может обнаружить тестирование API

  1. Неспособность API корректно обрабатывать ошибки
  2. Неправильные сообщения (предупреждения ) об ошибке
  3. Неправильная обработка допустимых значений аргумента
  4. Данные ответа не структурированы правильно или имеют не подходящий тип (например, не соотвествуют ожидаемому формату (JSON или XML))
  5. Отсутствие или дублирование функционала. Например, неиспользованные флаги.
  6. Вопросы надежности. Сложность подключения и получения ответа от API
  7. Проблемы с безопасностью
  8. Проблемы многопоточности
  9. Проблемы с производительностью. Время отклика API очень велико

Простые советы для API тестирования

  1. Тестовые сценарии должны быть сгруппированы по тестовым категориям. Желательно вверху каждого теста иметь описание(объявление) вызываемых API
  2. Выбор параметров должен быть явно указан в самом тестовом сценарии
  3. Желательно иметь приоритеты вызовов функций API
  4. Последовательность вызовов API должна быть хорошо спланирована
  5. Особое внимание следует уделить обработке одноразовых функций вызова, таких как - Delete и т.д.
  6. Каждый тестовый сценарий должен быть как можно более независимым
  7. Избегайте связанных между собой тестов
  8. Чтобы обеспечить большее покрытие тестами, создайте тестовые случаи для всех возможных входных комбинаций API. Используйте data-driven подход. В веб-сервисах RESTful входные данные обычно представлены в формате JSON, а в некоторых случаях пропущенное значение определенного ключа рассматривается по-разному (null, empty). Чтобы избежать этих неоднозначных тестовых сценариев, настоятельно рекомендуется использовать подмножество моделей входных данных.
  9. Не забываем создавать как позитивные так и негативные сценарии проверок

Простые примеры проверок:

Позитивный тест

  1. Убедитесь, что API получает входные данные и возвращает ожидаемые выходные данные, как указано в требовании.
  2. Убедитесь, что код состояния ответа возвращается, как указано в требовании, независимо от того, возвращает ли он код 2xx или код ошибки.
  3. Проверяйте запросы к API с минимальным количеством обязательных полей и с максимальным количеством полей.

Негативный тест

  1. Убедитесь, что API возвращает соответствующий ответ, когда ожидаемый результат не существует.
  2. Проверьте валидацию всех как обязательных, так и не обязательных параметров запроса.
  3. Проверьте поведение API с различными уровнями авторизации.

Выводы:

API состоит из набора классов / функций / процедур, которые представляют уровень бизнес-логики. Если API не протестирован должным образом, это может вызвать проблемы не только в приложении API, но и в вызывающем приложении. Таким образом, API тестирование - необходимый атрибут в разработке программного обеспечения.