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

Что такое REST Assured?

1.0 Junior🔥 221 комментариев
#API тестирование#Java

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

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

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

Что такое REST Assured?

REST Assured — это мощная Java-библиотека с открытым исходным кодом, специально разработанная для тестирования RESTful API. Она предоставляет DSL (Domain Specific Language), который позволяет QA Automation инженерам и разработчикам писать читаемые, лаконичные и выразительные тесты для веб-сервисов, имитируя HTTP-запросы (GET, POST, PUT, DELETE и др.) и проверяя ответы.

Главная цель REST Assured — упростить процесс тестирования API, скрыв всю низкоуровневую сложность работы с HTTP-клиентами (например, Apache HttpClient или HttpURLConnection). Вместо написания многословного кода для настройки соединений, обработки исключений и парсинга JSON/XML, вы можете сосредоточиться на логике теста, используя синтаксис, напоминающий естественный язык (в стиле BDD — Behavior-Driven Development).

Ключевые возможности и преимущества

  • Простой и выразительный DSL: Основное преимущество. Позволяет описывать тесты в стиле "given-when-then" (данные-когда-тогда), что делает их невероятно читаемыми даже для не-технических специалистов.
  • Поддержка всех основных HTTP-методов: Полноценная работа с GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS.
  • Удобная работа с JSON и XML: Автоматическая сериализация Java-объектов в JSON/XML для тела запроса и десериализация ответов обратно в объекты или извлечение данных с помощью Path и XPath.
  • Гибкая валидация ответов: Мощные механизмы ассерций (assertions) для проверки статус-кода, заголовков (headers), cookies и тела ответа. Интегрируется с популярными assertion-библиотеками, такими как Hamcrest и AssertJ.
  • Аутентификация и авторизация: Встроенная поддержка основных схем: Basic Auth, Digest Auth, OAuth 1.0 & 2.0, Form Authentication.
  • Спецификация и повторное использование: Поддержка спецификаций (RequestSpecBuilder, ResponseSpecBuilder) для вынесения общего кода (базовый URL, заголовки, ожидания) и избежания дублирования.
  • Логирование: Возможность детального логирования как запроса, так и ответа для эффективной отладки.
  • Интеграция с тестовыми фреймворками: Идеально сочетается с JUnit 4/5 и TestNG, что позволяет встраивать тесты API в стандартные пайплайны CI/CD (Jenkins, GitLab CI и др.).

Пример теста с использованием REST Assured

Предположим, нам нужно протестировать эндпоинт GET /api/users/{id}, который возвращает данные пользователя в JSON.

import io.restassured.RestAssured;
import io.restassured.response.Response;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.given;
import static org.hamcrest.Matchers.*;

public class UserApiTest {

    @Test
    public void testGetUserById() {
        // 1. Given (Предусловия): настраиваем базовые параметры запроса
        given()
                .baseUri("https://jsonplaceholder.typicode.com")
                .pathParam("userId", 1) // Устанавливаем параметр пути
                .log().all() // Логируем весь запрос (опционально, для отладки)

        // 2. When (Действие): выполняем сам HTTP-вызов
        .when()
                .get("/users/{userId}")

        // 3. Then (Проверки): валидируем ответ
        .then()
                .log().all() // Логируем весь ответ
                .statusCode(200) // Проверяем статус-код 200 OK
                .body("id", equalTo(1)) // Проверяем, что поле "id" равно 1
                .body("name", notNullValue()) // Проверяем, что поле "name" не пустое
                .body("address.city", containsString("Gwenborough")); // Проверяем вложенное поле
    }

    @Test
    public void testCreateUser() {
        // Пример POST-запроса с отправкой JSON в теле
        String requestBody = "{\"name\": \"John Doe\", \"username\": \"johnd\", \"email\": \"john@example.com\"}";

        given()
                .baseUri("https://jsonplaceholder.typicode.com")
                .header("Content-Type", "application/json") // Устанавливаем заголовок
                .body(requestBody) // Передаем тело запроса
        .when()
                .post("/users")
        .then()
                .statusCode(201) // Ожидаем код 201 Created
                .body("id", greaterThan(0)); // Проверяем, что новый ID был создан
    }
}

Типичный стек технологий с REST Assured

REST Assured редко используется изолированно. Обычно он является частью более крупного тестового фреймворка:

  • Язык: Java (версии 8+).
  • Сборка и зависимости: Maven или Gradle.
  • Фреймворк для модульного тестирования: JUnit 4/5 или TestNG.
  • Assertion-библиотеки: Hamcrest (часто идет в комплекте), AssertJ.
  • Управление тестовыми данными: Jackson или Gson для сложной работы с JSON, JSON Path, XML Path.
  • Репортинг: Allure Framework (имеет отличную интеграцию с REST Assured) или ExtentReports для создания наглядных отчетов.

Заключение

REST Assured — это де-факто стандарт в экосистеме Java для автоматизации тестирования REST API. Он значительно сокращает время написания и поддержки тестов благодаря своему интуитивно понятному DSL, беря на себя всю рутинную работу с HTTP. Для QA Automation инженера владение этой библиотекой является критически важным навыком, позволяющим эффективно проверять бизнес-логику, скрытую за API, интегрировать тесты API в End-to-End сценарии и обеспечивать надежность сервисного слоя современного приложения.

Что такое REST Assured? | PrepBro