Какие запросы REST Assured используешь чаще всего?
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Наиболее часто используемые запросы в REST Assured
В моей практике работы с REST Assured — ведущим Java-фреймворком для тестирования REST API — можно выделить несколько ключевых типов HTTP-запросов, которые составляют основу автоматизации. Их использование зависит от тестируемого функционала, но паттерны повторяются от проекта к проекту.
1. GET-запросы: получение данных
Это самые частые запросы для проверки чтения ресурсов. REST Assured делает их выполнение и валидацию предельно простыми.
// Базовый GET для получения всех или конкретного ресурса
given()
.header("Authorization", "Bearer " + token)
.param("status", "active") // Добавление query-параметров
.when()
.get("/api/users")
.then()
.statusCode(200)
.body("size()", greaterThan(0))
.body("findAll { it.status == 'active' }.size()", equalTo(10));
// GET с извлечением данных для последующих тестов
Response response = given().get("/api/users/123");
int userId = response.jsonPath().getInt("id");
String userName = response.jsonPath().getString("name");
2. POST-запросы: создание ресурсов
Используются для тестирования создания новых сущностей. Критически важно проверять не только успешный сценарий, но и валидацию ошибок.
// Создание нового пользователя с JSON телом
String userJson = """
{
"name": "Ivan Ivanov",
"email": "ivan@example.com",
"role": "ADMIN"
}
""";
given()
.contentType(ContentType.JSON)
.body(userJson)
.when()
.post("/api/users")
.then()
.statusCode(201)
.header("Location", notNullValue())
.body("id", notNullValue())
.body("name", equalTo("Ivan Ivanov"));
// POST с формой данных (form-data)
given()
.contentType(ContentType.URLENC)
.formParam("username", "testuser")
.formParam("password", "secret")
.when()
.post("/api/login");
3. PUT и PATCH-запросы: полное и частичное обновление
- PUT — для полного обновления ресурса
- PATCH — для частичного обновления (становится все популярнее в современных API)
// PUT запрос - полная замена ресурса
given()
.contentType(ContentType.JSON)
.body("{ \"name\": \"New Name\", \"email\": \"new@mail.com\" }")
.when()
.put("/api/users/456")
.then()
.statusCode(200)
.body("email", equalTo("new@mail.com"));
// PATCH запрос - частичное обновление
given()
.contentType("application/merge-patch+json") // Специфичный Content-Type для PATCH
.body("{ \"email\": \"updated@mail.com\" }")
.when()
.patch("/api/users/456")
.then()
.statusCode(200);
4. DELETE-запросы: удаление ресурсов
Важны для тестирования сценариев удаления и проверки idempotency (повторный DELETE должен возвращать тот же результат).
// Удаление ресурса
given()
.header("Authorization", "Bearer " + token)
.when()
.delete("/api/users/789")
.then()
.statusCode(204); // No Content - стандартный ответ для успешного удаления
// Проверка idempotency: повторный запрос
when()
.delete("/api/users/789")
.then()
.statusCode(404); // или 204, зависит от реализации API
5. Комбинированные сценарии и продвинутые техники
На практике часто используются цепочки запросов, где результат одного становится входными данными для другого:
// Типичный E2E сценарий: создать -> получить -> обновить -> удалить
// 1. Создание
Response createResp = given().body(userData).post("/api/users");
int newUserId = createResp.jsonPath().getInt("id");
// 2. Получение и валидация
given().get("/api/users/" + newUserId)
.then().body("status", equalTo("PENDING"));
// 3. Обновление
given().body("{ \"status\": \"ACTIVE\" }").patch("/api/users/" + newUserId);
// 4. Финальная проверка и очистка
given().get("/api/users/" + newUserId)
.then().body("status", equalTo("ACTIVE"));
given().delete("/api/users/" + newUserId);
Ключевые аспекты эффективного использования:
- Специфичные Content-Type: Для PATCH часто требуется
application/merge-patch+json, для файлов —multipart/form-data. - Работа с аутентификацией: Регулярно используются
basicAuth(),oauth2(), кастомные заголовки с токенами. - Валидация сложных ответов: Комбинации JsonPath и Hamcrest матчеров для проверки вложенных структур.
- Логирование:
.log().all()для отладки неудачных тестов. - Параметризация: Использование
@Testпараметров в JUnit/TestNG для Data-Driven Testing.
В заключение: хотя базовые GET, POST, PUT, DELETE составляют 80% всех запросов, настоящая эффективность достигается через их комбинацию, правильную валидацию ответов (не только statusCode, но и body, headers, время ответа) и моделирование реальных пользовательских сценариев. Современные API все чаще используют PATCH и специфичные Content-Type, что требует от QA инженера глубокого понимания не только инструмента, но и стандартов REST и HTTP протокола.