Тестирование API в последнее время приобрело большую популярность. Поскольку пользовательский интерфейс не участвует, тестировать гораздо проще и быстрее. Именно поэтому тестирование API считается первым выбором для выполнения сквозного тестирования системы. Интеграция автоматизированных тестов API с CI/CD конвейерами позволяет командам получать более быстрые отзывы о сборках.
В этом блоге мы обсудим и узнаем о запросах DELETE API и о том, как их обрабатывать с помощью Playwright Java для автоматизированного тестирования, охватывая следующие пункты:
- Что такое запрос DELETE?
- Как тестировать API DELETE с помощью Playwright Java?
Начало работы
Рекомендуется ознакомиться с предыдущим учебным блогом, чтобы узнать детали, касающиеся требований, настройки и конфигурации.
Приложение под тестом
Мы будем использовать бесплатные RESTful e-commerce API, которые предлагают множество API, связанных с функциональностью управления заказами, позволяя нам создавать, извлекать, обновлять и удалять заказы.
Это приложение можно настроить локально с помощью Docker или NodeJS.
Что такое запрос DELETE?
Запрос API DELETE удаляет указанный ресурс с сервера. Как правило, в запросах DELETE отсутствует тело ответа.
Ресурс указывается с помощью URI, и сервер удаляет его навсегда. Запросы DELETE не считаются безопасными и идемпотентными, так как они могут вызвать побочные эффекты на сервере, такие как удаление данных из базы данных.
Вот некоторые ограничения запросов DELETE:
- Данные, удаленные с помощью запроса DELETE, не подлежат восстановлению, поэтому с ними следует обращаться осторожно.
- Это не считается безопасным методом, так как он может напрямую удалить ресурс из базы данных, вызывая конфликты в системе.
- Это не идемпотентный метод, что означает, что многократный вызов для одного и того же ресурса может привести к различным состояниям. Например, в первом случае, когда вызывается 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 |
Заказ с указанным |
403 | Токен отсутствует в запросе |
Как тестировать DELETE API с использованием Playwright Java
Тестирование DELETE API – важный этап для обеспечения стабильности и надежности приложения. Корректная реализация DELETE API необходима для проверки на случайные потери данных и несоответствия, поскольку DELETE API отвечают за удаление ресурсов из системы.
В этом демонстрационном тестировании DELETE API с использованием Playwright Java мы будем использовать /deleteOrder/{id}
для удаления существующего заказа из системы.
Сценарий тестирования 1: Удаление действительного заказа
- Запустите службу электронной коммерции RESTful.
- С помощью запроса POST создайте несколько заказов в системе.
- Удалите заказ с
order_id
“1” с помощью запроса DELETE. - Убедитесь, что в ответе возвращается статус-код 204.


Реализация теста
Следует выполнить следующие шаги для реализации тестового сценария:
- Добавьте новые заказы, используя POST-запрос.
- Обратитесь к API
/auth
для генерации токена. - Обратитесь к конечной точке API
/deleteOrder/
с токеном иorder_id
для удаления заказа. - Убедитесь, что код состояния 204 возвращается в ответе.
Создан новый метод тестирования, testShouldDeleteTheOrder()
, в существующем тестовом классе HappyPathTests
. Этот метод тестирования реализует три вышеупомянутых шага для тестирования DELETE API.
public void testShouldDeleteTheOrder() {
final APIResponse authResponse = this.request.post("/auth", RequestOptions.create().setData(getCredentials()));
final JSONObject authResponseObject = new JSONObject(authResponse.text());
final String token = authResponseObject.get("token").toString();
final int orderId = 1;
final APIResponse response = this.request.delete("/deleteOrder/" + orderId, RequestOptions.create()
.setHeader("Authorization", token));
assertEquals(response.status(), 204);
}
Сначала будет выполнен 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
для выполнения тестов в порядке шагов, которые мы обсудили в реализации теста.
<suite name="Restful ECommerce Test Suite">
<test name="Testing Happy Path Scenarios of Creating and Updating Orders">
<classes>
<class name="io.github.mfaisalkhatri.api.restfulecommerce.HappyPathTests">
<methods>
<include name="testShouldCreateNewOrders"/>
<include name="testShouldDeleteTheOrder"/>
</methods>
</class>
</classes>
</test>
</suite>
Сначала будет выполнен метод тестирования testShouldCreateNewOrders()
, который создаст новые заказы. Затем будет выполнен метод testShouldDeleteTheOrder()
для тестирования API удаления заказа. Следующий скриншот выполнения теста в IntelliJ IDE показывает, что тесты были выполнены успешно.
Теперь давайте проверим, что заказ был правильно удален, написав новый тест, который вызовет API-эндпоинт GET /getOrder
с удаленным order_id
.

Теперь давайте проверим, что заказ был правильно удален, написав новый тест, который вызовет API-эндпоинт GET /getOrder
с удаленным order_id
.
Сценарий теста 2: Извлечение удаленного заказа
- Удалите действительный заказ с
order_id
“1.” - Используя GET
/getOrder
API, попробуйте извлечь заказ сorder_id
“1.” - Проверьте, что возвращается Код состояния 404 с сообщением “Заказ с указанными параметрами не найден!” в ответе.
Реализация теста
Давайте создадим новый тестовый метод, testShouldNotRetrieveDeletedOrder()
, в существующем классе HappyPathTests
.
public void testShouldNotRetrieveDeletedOrder() {
final int orderId = 1;
final APIResponse response = this.request.get("/getOrder", RequestOptions.create().setQueryParam("id", orderId));
assertEquals(response.status(), 404);
final JSONObject jsonObject = new JSONObject(response.text());
assertEquals(jsonObject.get("message"), "No Order found with the given parameters!");
}
Реализация этого сценария теста довольно проста. Мы будем выполнять GET-запрос к API /getOrder
для получения удаленного заказа с order_id
“1.”
Затем следует утверждение, чтобы проверить, что GET API должен вернуть код состояния 404 в ответе с сообщением “No Order found with the given parameters!”
Этот тест гарантирует, что API удаления заказа работает правильно и заказ был удален из системы.
Выполнение теста
Давайте обновим файл testng.xml
и добавим этот тестовый сценарий в конце после теста удаления.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Restful ECommerce Test Suite">
<test name="Testing Happy Path Scenarios of Creating and Updating Orders">
<classes>
<class name="io.github.mfaisalkhatri.api.restfulecommerce.HappyPathTests">
<methods>
<include name="testShouldCreateNewOrders"/>
<include name="testShouldDeleteTheOrder"/>
<include name="testShouldNotRetrieveDeletedOrder"/>
</methods>
</class>
</classes>
</test>
</suite>
Теперь все три теста должны запускаться последовательно. Первый создаст заказы; второй удалит заказ с 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