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

Какие знаешь ключевые слова REST Assured?

2.0 Middle🔥 211 комментариев
#Автоматизация тестирования#Инструменты тестирования#Тестирование API

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

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

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

Ключевые слова и методы REST Assured для автоматизации API тестирования

REST Assured — это мощная Java-библиотека для тестирования REST API, которая использует DSL (Domain Specific Language) подход, делая код читаемым и похожим на естественный язык. Вот основные категории ключевых слов и методов:

1. Методы для отправки HTTP-запросов

Базовые методы, соответствующие HTTP-глаголам:

given().when().get("/api/users");        // GET запрос
given().when().post("/api/users");       // POST запрос  
given().when().put("/api/users/1");      // PUT запрос
given().when().delete("/api/users/1");   // DELETE запрос
given().when().patch("/api/users/1");    // PATCH запрос

2. Настройка запроса (Given)

Методы для конфигурации запроса перед отправкой:

given()
    .header("Content-Type", "application/json")  // Установка заголовков
    .header("Authorization", "Bearer token")
    .cookie("sessionId", "abc123")               // Установка cookies
    .pathParam("id", 42)                         // Параметры пути
    .queryParam("page", 2)                       // Query-параметры
    .queryParam("limit", 10)
    .body(requestObject)                         // Тело запроса
    .contentType(ContentType.JSON)               // Тип контента
    .accept(ContentType.JSON)                    // Accept заголовок
    .auth().basic("user", "pass")                // Аутентификация
    .log().all()                                 // Логирование
    .when()
    .get("/api/users/{id}");

3. Валидация ответа (Then)

Методы для проверки ответа от сервера:

then()
    .statusCode(200)                             // Проверка статус-кода
    .statusLine("HTTP/1.1 200 OK")               // Проверка статус-линии
    .header("Content-Type", "application/json")  // Проверка заголовков
    .cookie("sessionId")                         // Проверка cookies
    .time(lessThan(2000L))                       // Проверка времени ответа
    .body("users.size()", equalTo(5))            // Проверка тела ответа
    .body("users[0].name", equalTo("John"))
    .body("users.findAll { it.age > 30 }.size()", greaterThan(2))
    .contentType(ContentType.JSON);

4. Извлечение данных из ответа

Методы для экстракции значений:

Response response = get("/api/users/1");         // Получение Response объекта
String name = response.path("name");            // Извлечение по пути
JsonPath jsonPath = response.jsonPath();        // JsonPath для сложных извлечений
int userId = jsonPath.getInt("id");

// Извлечение с типизацией
User user = get("/api/users/1").as(User.class); // Десериализация в объект
List<User> users = get("/api/users").as(new TypeRef<List<User>>() {});

5. Специальные валидации тела ответа

Продвинутые валидации с использованием Hamcrest matchers и JsonPath:

then()
    .body("users.name", hasItems("John", "Anna"))      // Проверка наличия элементов
    .body("users.id", everyItem(greaterThan(0)))       // Проверка всех элементов
    .body("users.findAll { it.active == true }.size()", equalTo(3))
    .rootPath("data.users[0]")                         // Установка корневого пути
    .body("firstName", equalTo("John"))
    .appendRootPath("address")
    .body("city", equalTo("New York"));

6. Сериализация и десериализация

Работа с объектами Java:

// Сериализация объекта в JSON
User newUser = new User("John", "john@example.com");
given()
    .body(newUser)                                    // Автоматическая сериализация
    .when()
    .post("/api/users");

// Десериализация JSON в объект
User createdUser = post("/api/users")
    .then()
    .extract()
    .as(User.class);

7. Фильтры и логгирование

Для отладки и мониторинга:

given()
    .filter(new RequestLoggingFilter())              // Логирование запроса
    .filter(new ResponseLoggingFilter())             // Логирование ответа
    .filter(new ErrorLoggingFilter())                // Логирование ошибок
    .when()
    .get("/api/users");

// Кастомное логгирование
given()
    .log().all()                                     // Логировать всё
    .log().headers()                                 // Только заголовки
    .log().body()                                    // Только тело
    .log().cookies()                                 // Только cookies
    .when()
    .get("/api/users");

8. Спецификации для переиспользования

Для избежания дублирования кода:

RequestSpecification requestSpec = new RequestSpecBuilder()
    .setBaseUri("https://api.example.com")
    .setContentType(ContentType.JSON)
    .addHeader("Authorization", "Bearer token")
    .build();

ResponseSpecification responseSpec = new ResponseSpecBuilder()
    .expectStatusCode(200)
    .expectContentType(ContentType.JSON)
    .build();

given()
    .spec(requestSpec)
    .when()
    .get("/users")
    .then()
    .spec(responseSpec);

Практические примеры использования:

// Комплексный пример
@Test
public void testCreateAndGetUser() {
    // Создание пользователя
    User newUser = new User("testUser", "test@example.com");
    int userId = given()
        .contentType(ContentType.JSON)
        .body(newUser)
        .when()
        .post("/api/users")
        .then()
        .statusCode(201)
        .body("id", notNullValue())
        .extract()
        .path("id");
    
    // Получение созданного пользователя
    given()
        .pathParam("id", userId)
        .when()
        .get("/api/users/{id}")
        .then()
        .statusCode(200)
        .body("username", equalTo("testUser"))
        .body("email", equalTo("test@example.com"));
}

Ключевые преимущества REST Assured включают: читаемый DSL-синтаксис, интеграцию с Hamcrest для мощных валидаций, поддерку JsonPath и XmlPath, встроенную сериализацию/десериализацию (Jackson, Gson), легкую интеграцию с JUnit/TestNG, и расширяемость через фильтры и спецификации. Эти особенности делают REST Assured одним из наиболее популярных инструментов для автоматизации тестирования REST API в экосистеме Java.

Какие знаешь ключевые слова REST Assured? | PrepBro