← Назад к вопросам

Какие запросы REST Assured используешь чаще всего?

2.0 Middle🔥 182 комментариев
#API тестирование#Фреймворки тестирования

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Наиболее часто используемые запросы в 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 протокола.