Ответ
Rest Assured — это доминирующая Java-библиотека с открытым исходным кодом, специально разработанная для удобного тестирования RESTful API. Она предоставляет DSL (Domain-Specific Language), который позволяет описывать HTTP-запросы и проверки ответов на почти естественном языке, что делает тесты чрезвычайно читаемыми и лёгкими в написании.
Ключевые возможности для тестировщика:
- Простой синтаксис: Цепочка методов
given()(предусловия),when()(действие),then()(проверки). - Поддержка всех HTTP-методов: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS.
- Мощные валидации: Проверка статус-кода, заголовков, тела ответа (JSON, XML) с использованием библиотек типа Hamcrest или JsonPath.
- Встроенная поддержка аутентификации: Basic Auth, OAuth 1/2, формы.
- Лёгкая интеграция: Работает с любым тестовым фреймворком (JUnit 4/5, TestNG) и системой сборки (Maven, Gradle).
Пример комплексного теста API с Rest Assured:
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import static io.restassured.RestAssured.*;
import static org.hamcrest.Matchers.*;
public class UserApiTest {
@BeforeAll
static void setup() {
RestAssured.baseURI = "https://api.example.com";
RestAssured.authentication = basic("username", "password"); // Предусловие для всех тестов
}
@Test
void testGetUserById() {
given()
.pathParam("userId", 42) // Параметр пути
.log().all() // Логируем весь запрос (для отладки)
.when()
.get("/users/{userId}") // Выполняем GET-запрос
.then()
.log().body() // Логируем тело ответа
.statusCode(200) // Проверяем статус
.contentType(ContentType.JSON) // Проверяем тип контента
.body("id", equalTo(42), // Проверяем поле в JSON-ответе
"name", not(emptyString()),
"address.city", equalTo("Moscow")); // Используем JsonPath
}
@Test
void testCreateNewUser() {
String userJson = """
{
"name": "John Doe",
"email": "john.doe@test.com"
}
""";
given()
.contentType(ContentType.JSON) // Устанавливаем заголовок Content-Type
.body(userJson) // Передаём тело запроса
.when()
.post("/users")
.then()
.statusCode(201) // Проверяем, что ресурс создан
.header("Location", containsString("/users/")) // Проверяем заголовок Location
.body("id", greaterThan(0)); // Проверяем, что ID присвоен
}
@Test
void testUserNotFound() {
when()
.get("/users/99999")
.then()
.statusCode(404) // Ожидаем 404 Not Found
.body("message", equalTo("User not found"));
}
}
Почему Rest Assured популярен среди QA-автоматизаторов: Он абстрагирует низкоуровневые детали HTTP-клиента (в отличие от OkHttp), позволяя сосредоточиться на бизнес-логике теста и делая код поддержки тестов гораздо проще.