Что такое библиотека REST Assured и для чего она используется?

Ответ

REST Assured — это популярная Java-библиотека с DSL (предметно-ориентированным языком) для тестирования RESTful API. Она превращает написание HTTP-запросов и проверку ответов в читаемый код, похожий на естественный язык (given/when/then).

Для чего используется:

  • Автоматизация тестов REST API вместо ручных проверок в Postman.
  • Интеграционное и end-to-end тестирование бэкенд-сервисов.
  • Валидация JSON/XML-ответов, статус-кодов, заголовков.
  • Работа с аутентификацией (Basic, OAuth, JWT).

Ключевые возможности и синтаксис:

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

// 1. Простой GET-запрос с проверкой статуса и поля в JSON
Given().
    baseUri("https://api.example.com").
When().
    get("/users/1").
Then().
    statusCode(200).
    body("name", equalTo("Leanne Graham")).
    body("address.city", equalTo("Gwenborough"));

// 2. POST-запрос с телом в формате JSON и извлечением данных из ответа
String userId =
Given().
    contentType(ContentType.JSON).
    body("{"name": "John", "job": "Engineer"}").
When().
    post("/users").
Then().
    statusCode(201).
    extract().
    path("id"); // Извлекаем ID созданного пользователя

// 3. Сложная валидация JSON-массива с помощью Groovy Path
When().
    get("/posts").
Then().
    body("findAll { it.userId == 1 }.size()", is(10)); // Проверяем, что у userId=1 ровно 10 постов

Преимущества:

  • Читаемый DSL.
  • Мощная поддержка JSON и XML (с помощью Groovy GPath или XmlPath).
  • Интеграция с тестовыми фреймворками (JUnit, TestNG).
  • Поддержка спецификаций (Serenity BDD).

Ответ 18+ 🔞

Вот же ж, блядь, классика жанра! REST Assured — это как если бы твой код сам пошёл в бар, заказал пива и проверил, не пиздят ли ему в чеке. Библиотека, которая из тестирования API делает почти что литературное чтение, если, конечно, литература — это про то, как ты ебёшь сервер запросами и смотришь, не обосрётся ли он.

Зачем это, спрашивается, нужно? Ну, представь: вместо того чтобы тыкать кнопки в Постмане, как обезьяна, ты пишешь код, который это делает за тебя. Автоматически, блядь! Проверяет, отвечает ли сервер как надо, не послал ли он тебе хуйню вместо JSON, и правильно ли он понимает, кто ты такой (с логином-паролем или там с этим ёбаным токеном).

А теперь смотри, как это выглядит в деле, сука:

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

// 1. Простейший запрос — «Эй, сервер, дай-ка пользователя!»
Given().
    baseUri("https://api.example.com").
When().
    get("/users/1").
Then().
    statusCode(200). // Должен ответить «200 ОК», а не «404 пошёл нахуй»
    body("name", equalTo("Leanne Graham")). // И имя должно быть Леанна, а не Вася Пупкин
    body("address.city", equalTo("Gwenborough")); // И город должен быть Гвенборо, а не Мухосранск

// 2. Создаём нового юзера — «Эй, сервер, заведи нового чувака!»
String userId =
Given().
    contentType(ContentType.JSON).
    body("{"name": "John", "job": "Engineer"}"). // Вот тебе, блядь, данные нового работяги
When().
    post("/users").
Then().
    statusCode(201). // Должен сказать «201 Создано», а не «500 я сломался»
    extract().
    path("id"); // А теперь вытащи из ответа его новый ID, он нам ещё пригодится

// 3. А это уже магия, блядь! Ищем все посты конкретного пользователя
When().
    get("/posts").
Then().
    body("findAll { it.userId == 1 }.size()", is(10)); // Смотри, тут Groovy! «Найди все посты, где userId равен 1, и посчитай их». Должно быть ровно 10, ни хуя больше, ни меньше.

И в чём, собственно, кайф? Читается это всё, как инструкция на человеческом, ёпта, языке: «Дано — Когда — Тогда». Не нужно писать километры непонятного кода. JSON и XML валидируются на раз-два. И впихнуть это в JUnit или TestNG — проще пареной репы. В общем, инструмент — огонь, если, конечно, не использовать его для ебли мозгов самому себе.