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.
Официальные ресурсы
Смотрите также
- API Testing Tutorial - Основы API тестирования
- Postman Tutorial - GUI-based API тестирование
- TestNG Tutorial - Java тест-фреймворк
- SoapUI Tutorial - Инструмент для SOAP/REST тестирования
