TL;DR

  • REST Assured = Java библиотека для тестирования REST API с fluent синтаксисом
  • Паттерн: given() (настройка) → when() (действие) → then() (проверка)
  • Assertions: статус-коды, заголовки, JSON/XML body через JsonPath/XmlPath
  • Интегрируется с JUnit 5, TestNG, Maven, Gradle
  • Лучший выбор для Java команд, желающих код-based API тесты

Идеально для: Java проектов, команд с JUnit/TestNG, CI/CD пайплайнов Пропусти, если: Не-Java стек или нужно GUI-тестирование (используй Postman) Время чтения: 14 минут

Твоему Java проекту нужны API тесты. Ручное тестирование в Postman не масштабируется. Ты хочешь тесты на том же языке, что и приложение, запускающиеся в CI/CD вместе с unit-тестами.

REST Assured приносит API тестирование в Java. Пиши тесты с fluent синтаксисом, валидируй ответы мощными matchers, интегрируй с существующими тест-фреймворками.

Что такое REST Assured?

REST Assured — Java библиотека, упрощающая тестирование REST API. Предоставляет domain-specific language (DSL) для HTTP запросов и валидации ответов.

Почему REST Assured:

  • Java-native — интеграция с JUnit, TestNG, Maven, Gradle
  • Fluent синтаксис — читаемый given/when/then паттерн
  • Мощная валидация — JsonPath, XmlPath, Hamcrest matchers
  • Аутентификация — OAuth, basic auth, API keys из коробки
  • Логирование — простая отладка запросов/ответов

Настройка

Maven

<dependencies>
    <dependency>
        <groupId>io.rest-assured</groupId>
        <artifactId>rest-assured</artifactId>
        <version>5.4.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>5.10.0</version>
        <scope>test</scope>
    </dependency>
</dependencies>

Gradle

testImplementation 'io.rest-assured:rest-assured:5.4.0'
testImplementation 'org.junit.jupiter:junit-jupiter:5.10.0'

Статические импорты

import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;

Первый тест

Базовый GET запрос

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

public class ApiTest {

    @Test
    void shouldReturnUsers() {
        given()
            .baseUri("https://api.example.com")
        .when()
            .get("/users")
        .then()
            .statusCode(200)
            .body("size()", greaterThan(0));
    }
}

POST с JSON телом

@Test
void shouldCreateUser() {
    String requestBody = """
        {
            "name": "John Doe",
            "email": "john@example.com"
        }
        """;

    given()
        .baseUri("https://api.example.com")
        .contentType("application/json")
        .body(requestBody)
    .when()
        .post("/users")
    .then()
        .statusCode(201)
        .body("id", notNullValue())
        .body("name", equalTo("John Doe"));
}

Построение запросов

Заголовки и Query параметры

given()
    .baseUri("https://api.example.com")
    .header("Authorization", "Bearer " + token)
    .header("Accept", "application/json")
    .queryParam("page", 1)
    .queryParam("limit", 10)
.when()
    .get("/users")
.then()
    .statusCode(200);

Path параметры

given()
    .baseUri("https://api.example.com")
    .pathParam("userId", 123)
.when()
    .get("/users/{userId}")
.then()
    .statusCode(200)
    .body("id", equalTo(123));

Валидация ответов

Статус и заголовки

.then()
    .statusCode(200)
    .statusLine(containsString("OK"))
    .header("Content-Type", "application/json")
    .header("Cache-Control", containsString("max-age"));

JSON Body с JsonPath

// Ответ: {"user": {"id": 1, "name": "John", "roles": ["admin", "user"]}}

.then()
    .body("user.id", equalTo(1))
    .body("user.name", equalTo("John"))
    .body("user.roles", hasSize(2))
    .body("user.roles", hasItem("admin"));

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

Response response = given()
    .baseUri("https://api.example.com")
.when()
    .get("/users/1")
.then()
    .extract().response();

String name = response.jsonPath().getString("name");
int id = response.jsonPath().getInt("id");
List<String> roles = response.jsonPath().getList("roles");

Аутентификация

Basic Auth

given()
    .auth().basic("username", "password")
.when()
    .get("/protected")
.then()
    .statusCode(200);

Bearer Token

given()
    .auth().oauth2(accessToken)
.when()
    .get("/api/resource")
.then()
    .statusCode(200);

// Или через заголовок
given()
    .header("Authorization", "Bearer " + accessToken)
.when()
    .get("/api/resource");

Организация тестов

Базовая конфигурация

import org.junit.jupiter.api.BeforeAll;
import io.restassured.RestAssured;

public class BaseApiTest {

    @BeforeAll
    static void setup() {
        RestAssured.baseURI = "https://api.example.com";
        RestAssured.basePath = "/v1";
        RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
    }
}

REST Assured с помощью ИИ

ИИ инструменты могут помочь писать и поддерживать REST Assured тесты.

Что ИИ делает хорошо:

  • Генерировать тест-методы из API документации
  • Создавать цепочки assertions для сложного JSON
  • Конвертировать Postman коллекции в REST Assured
  • Предлагать edge case сценарии

Что требует людей:

  • Проектирование тест-стратегии
  • Понимание бизнес-правил валидации
  • Отладка проблем аутентификации
  • Решения по performance тестированию

FAQ

Что такое REST Assured?

REST Assured — Java библиотека для тестирования REST API. Предоставляет fluent, domain-specific language (DSL) с паттерном given/when/then, делающим тесты читаемыми. Интегрируется с JUnit 5, TestNG, Maven и Gradle — естественно вписываясь в Java проекты.

REST Assured vs Postman — что использовать?

REST Assured — код (Java), запускается в CI/CD, живёт в version control. Postman — GUI, отлично подходит для исследования и ручного тестирования. Используй REST Assured когда команда пишет на Java и нужны автоматизированные тесты в пайплайне. Используй Postman для быстрого исследования API или команд без Java разработчиков.

Может ли REST Assured тестировать SOAP API?

REST Assured создан специально для REST/HTTP API. Хотя можно отправлять XML, он не имеет SOAP-специфичных функций типа парсинга WSDL и обработки конвертов. Для SOAP тестирования используй SoapUI или Apache CXF.

Поддерживает ли REST Assured аутентификацию?

Да, полная поддержка. Basic auth через .auth().basic(), OAuth 2.0 через .auth().oauth2(), digest auth и кастомные заголовки для API keys или bearer tokens. Аутентификация настраивается для каждого запроса или глобально через RestAssured.authentication.

Официальные ресурсы

Смотрите также