Как протестировать DELETE-запросы для тестирования API с помощью Playwright на Java

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

В этом блоге мы обсудим и узнаем о запросах DELETE API и о том, как их обрабатывать с помощью Playwright Java для автоматизированного тестирования, охватывая следующие пункты:

  1. Что такое запрос DELETE?
  2. Как тестировать API DELETE с помощью Playwright Java?

Начало работы

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

Приложение под тестом

Мы будем использовать бесплатные RESTful e-commerce API, которые предлагают множество API, связанных с функциональностью управления заказами, позволяя нам создавать, извлекать, обновлять и удалять заказы.

Это приложение можно настроить локально с помощью Docker или NodeJS.

Что такое запрос DELETE?

Запрос API DELETE удаляет указанный ресурс с сервера. Как правило, в запросах DELETE отсутствует тело ответа.

Ресурс указывается с помощью URI, и сервер удаляет его навсегда. Запросы DELETE не считаются безопасными и идемпотентными, так как они могут вызвать побочные эффекты на сервере, такие как удаление данных из базы данных.

Вот некоторые ограничения запросов DELETE:

  1. Данные, удаленные с помощью запроса DELETE, не подлежат восстановлению, поэтому с ними следует обращаться осторожно.
  2. Это не считается безопасным методом, так как он может напрямую удалить ресурс из базы данных, вызывая конфликты в системе.
  3. Это не идемпотентный метод, что означает, что многократный вызов для одного и того же ресурса может привести к различным состояниям. Например, в первом случае, когда вызывается DELETE, он вернет код состояния 204, указывая на то, что ресурс был удален, и если DELETE будет вызван снова для того же ресурса, он может вернуть 404 NOT FOUND, так как указанный ресурс уже удален.

Вот пример конечной точки API DELETE из проекта RESTful электронной коммерции.

DELETE /deleteOrder/{id} :  Удаляет заказ по ID

Этот API требует, чтобы order_id был предоставлен в качестве параметра пути, чтобы удалить соответствующий заказ из системы. В этом запросе API DELETE не требуется предоставлять тело запроса. Однако в качестве меры безопасности требуется предоставить token в качестве header для удаления заказа.

После выполнения API удаляет указанный заказ из системы и возвращает статус-код 204.

В случае, если заказ не найден, или токен недействителен или не предоставлен, будет показан следующий ответ:

Status Code Description
400

Не удалось аутентифицировать токен

404

Заказ с указанным order_id не найден в системе

403 Токен отсутствует в запросе

Как тестировать DELETE API с использованием Playwright Java

Тестирование DELETE API – важный этап для обеспечения стабильности и надежности приложения. Корректная реализация DELETE API необходима для проверки на случайные потери данных и несоответствия, поскольку DELETE API отвечают за удаление ресурсов из системы.

В этом демонстрационном тестировании DELETE API с использованием Playwright Java мы будем использовать /deleteOrder/{id} для удаления существующего заказа из системы.

Сценарий тестирования 1: Удаление действительного заказа

  1. Запустите службу электронной коммерции RESTful.
  2. С помощью запроса POST создайте несколько заказов в системе.
  3. Удалите заказ с order_id “1” с помощью запроса DELETE.
  4. Убедитесь, что в ответе возвращается статус-код 204.


Реализация теста

Следует выполнить следующие шаги для реализации тестового сценария:

  1. Добавьте новые заказы, используя POST-запрос.
  2. Обратитесь к API /auth для генерации токена.
  3. Обратитесь к конечной точке API /deleteOrder/ с токеном и order_id для удаления заказа.
  4. Убедитесь, что код состояния 204 возвращается в ответе.

Создан новый метод тестирования,  testShouldDeleteTheOrder(), в существующем тестовом классе HappyPathTestsЭтот метод тестирования реализует три вышеупомянутых шага для тестирования DELETE API.

Java

 

Сначала будет выполнен POST-запрос к конечной точке API /auth для генерации токена. Полученный в ответе token сохраняется в переменной токена для дальнейшего использования в запросе DELETE API.

Следующим шагом будут сгенерированы новые заказы с использованием метода testShouldCreateNewOrders(), который уже обсуждался в предыдущем уроке, где мы говорили о тестировании POST-запросов с использованием Playwright Java.

После генерации заказов следующим шагом будет выполнение DELETE-запроса с действительным order_id, который удалит конкретный заказ.


Мы будем удалять заказ с order_id “1” с помощью метода  delete() , предоставленного фреймворком Playwright.

После удаления заказа в ответ возвращается Код состояния 204. Будет выполнено утверждение по Коду состояния, чтобы убедиться, что действие удаления было успешным. Поскольку в ответе не возвращается тело запроса, это единственное, что можно проверить.

Выполнение теста

Мы создадим новый testng.xml файл с именем testng-restfulecommerce-deleteorders.xml для выполнения тестов в порядке шагов, которые мы обсудили в реализации теста.

XML

 

Сначала будет выполнен метод тестирования testShouldCreateNewOrders() , который создаст новые заказы. Затем будет выполнен метод testShouldDeleteTheOrder() для тестирования API удаления заказа. Следующий скриншот выполнения теста в IntelliJ IDE показывает, что тесты были выполнены успешно.

Теперь давайте проверим, что заказ был правильно удален, написав новый тест, который вызовет API-эндпоинт GET /getOrder с удаленным order_id.

Теперь давайте проверим, что заказ был правильно удален, написав новый тест, который вызовет API-эндпоинт GET /getOrder с удаленным order_id.

Сценарий теста 2:  Извлечение удаленного заказа

  1. Удалите действительный заказ с order_id “1.”
  2. Используя GET /getOrder API, попробуйте извлечь заказ с order_id “1.”
  3. Проверьте, что возвращается Код состояния 404 с сообщением “Заказ с указанными параметрами не найден!” в ответе.

Реализация теста

Давайте создадим новый тестовый метод, testShouldNotRetrieveDeletedOrder(), в существующем классе HappyPathTests.

Java

 

Реализация этого сценария теста довольно проста. Мы будем выполнять GET-запрос к API /getOrder для получения удаленного заказа с order_id “1.”

Затем следует утверждение, чтобы проверить, что GET API должен вернуть код состояния 404 в ответе с сообщением “No Order found with the given parameters!”

Этот тест гарантирует, что API удаления заказа работает правильно и заказ был удален из системы.

Выполнение теста

Давайте обновим файл testng.xml и добавим этот тестовый сценарий в конце после теста удаления.

Java

 

Теперь все три теста должны запускаться последовательно. Первый создаст заказы; второй удалит заказ с order_id “1”; и последний тест отправит GET API для получения заказа с order_id “1”, возвращая код состояния 404.

На скриншоте выше показано, что все три теста были успешно выполнены, и DELETE API работает правильно, как ожидалось.

Краткое изложение

Запросы DELETE API позволяют удалять ресурс из системы. Поскольку удаление является важной функцией CRUD, важно протестировать ее и убедиться, что система работает, как ожидается. Однако стоит отметить, что DELETE – это необратимый процесс, поэтому его следует использовать с осторожностью.

Согласно моему опыту, хорошим подходом является отправка запроса GET после выполнения запроса DELETE, чтобы проверить, что указанный ресурс был успешно удален из системы.

Счастливого тестирования!

Source:
https://dzone.com/articles/test-delete-requests-for-api-testing-with-playwright-java