Ответ
Да, тестирование PATCH-эндпоинтов — стандартная задача при проверке REST API. PATCH используется для частичного обновления ресурса, что требует особого внимания к валидации.
Ключевые аспекты, которые я проверяю:
- Частичное обновление: Убедиться, что обновляются только переданные поля, а остальные остаются неизменными.
- Валидация входных данных: Корректная обработка невалидных типов данных, пустых значений или полей, не предназначенных для обновления.
- Идемпотентность: В идеале, несколько одинаковых PATCH-запросов должны давать тот же результат, что и один (хотя это не всегда гарантировано спецификацией).
- Ответ сервера: Проверка HTTP-статуса (обычно 200 OK или 204 No Content), а также того, что в ответе возвращается обновлённое представление ресурса.
Пример теста на Java (RestAssured):
@Test
public void testPartialUserUpdate() {
int userId = 42;
String originalName = "Old Name";
String originalEmail = "old@mail.com";
// 1. Подготовка: создаём пользователя (POST)
// ...
// 2. Действие: отправляем PATCH-запрос для обновления только email
String patchEndpoint = "/api/users/" + userId;
String newEmail = "new.qa@mail.com";
Map<String, Object> patchData = new HashMap<>();
patchData.put("email", newEmail);
Response response = given()
.contentType(ContentType.JSON)
.body(patchData)
.when()
.patch(patchEndpoint);
// 3. Проверки ответа
response.then().statusCode(200);
// 4. Проверка, что обновилось только email, а имя осталось прежним
given()
.when()
.get("/api/users/" + userId)
.then()
.statusCode(200)
.body("id", equalTo(userId))
.body("email", equalTo(newEmail)) // Новый email
.body("name", equalTo(originalName)); // Имя не изменилось
}
Также важно тестировать сценарии с JSON Patch (формат application/json-patch+json), где передаётся массив операций (add, replace, remove), если API это поддерживает.