Какие знаешь ключевые слова REST Assured?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Ключевые слова и методы REST Assured для автоматизации API тестирования
REST Assured — это мощная Java-библиотека для тестирования REST API, которая использует DSL (Domain Specific Language) подход, делая код читаемым и похожим на естественный язык. Вот основные категории ключевых слов и методов:
1. Методы для отправки HTTP-запросов
Базовые методы, соответствующие HTTP-глаголам:
given().when().get("/api/users"); // GET запрос
given().when().post("/api/users"); // POST запрос
given().when().put("/api/users/1"); // PUT запрос
given().when().delete("/api/users/1"); // DELETE запрос
given().when().patch("/api/users/1"); // PATCH запрос
2. Настройка запроса (Given)
Методы для конфигурации запроса перед отправкой:
given()
.header("Content-Type", "application/json") // Установка заголовков
.header("Authorization", "Bearer token")
.cookie("sessionId", "abc123") // Установка cookies
.pathParam("id", 42) // Параметры пути
.queryParam("page", 2) // Query-параметры
.queryParam("limit", 10)
.body(requestObject) // Тело запроса
.contentType(ContentType.JSON) // Тип контента
.accept(ContentType.JSON) // Accept заголовок
.auth().basic("user", "pass") // Аутентификация
.log().all() // Логирование
.when()
.get("/api/users/{id}");
3. Валидация ответа (Then)
Методы для проверки ответа от сервера:
then()
.statusCode(200) // Проверка статус-кода
.statusLine("HTTP/1.1 200 OK") // Проверка статус-линии
.header("Content-Type", "application/json") // Проверка заголовков
.cookie("sessionId") // Проверка cookies
.time(lessThan(2000L)) // Проверка времени ответа
.body("users.size()", equalTo(5)) // Проверка тела ответа
.body("users[0].name", equalTo("John"))
.body("users.findAll { it.age > 30 }.size()", greaterThan(2))
.contentType(ContentType.JSON);
4. Извлечение данных из ответа
Методы для экстракции значений:
Response response = get("/api/users/1"); // Получение Response объекта
String name = response.path("name"); // Извлечение по пути
JsonPath jsonPath = response.jsonPath(); // JsonPath для сложных извлечений
int userId = jsonPath.getInt("id");
// Извлечение с типизацией
User user = get("/api/users/1").as(User.class); // Десериализация в объект
List<User> users = get("/api/users").as(new TypeRef<List<User>>() {});
5. Специальные валидации тела ответа
Продвинутые валидации с использованием Hamcrest matchers и JsonPath:
then()
.body("users.name", hasItems("John", "Anna")) // Проверка наличия элементов
.body("users.id", everyItem(greaterThan(0))) // Проверка всех элементов
.body("users.findAll { it.active == true }.size()", equalTo(3))
.rootPath("data.users[0]") // Установка корневого пути
.body("firstName", equalTo("John"))
.appendRootPath("address")
.body("city", equalTo("New York"));
6. Сериализация и десериализация
Работа с объектами Java:
// Сериализация объекта в JSON
User newUser = new User("John", "john@example.com");
given()
.body(newUser) // Автоматическая сериализация
.when()
.post("/api/users");
// Десериализация JSON в объект
User createdUser = post("/api/users")
.then()
.extract()
.as(User.class);
7. Фильтры и логгирование
Для отладки и мониторинга:
given()
.filter(new RequestLoggingFilter()) // Логирование запроса
.filter(new ResponseLoggingFilter()) // Логирование ответа
.filter(new ErrorLoggingFilter()) // Логирование ошибок
.when()
.get("/api/users");
// Кастомное логгирование
given()
.log().all() // Логировать всё
.log().headers() // Только заголовки
.log().body() // Только тело
.log().cookies() // Только cookies
.when()
.get("/api/users");
8. Спецификации для переиспользования
Для избежания дублирования кода:
RequestSpecification requestSpec = new RequestSpecBuilder()
.setBaseUri("https://api.example.com")
.setContentType(ContentType.JSON)
.addHeader("Authorization", "Bearer token")
.build();
ResponseSpecification responseSpec = new ResponseSpecBuilder()
.expectStatusCode(200)
.expectContentType(ContentType.JSON)
.build();
given()
.spec(requestSpec)
.when()
.get("/users")
.then()
.spec(responseSpec);
Практические примеры использования:
// Комплексный пример
@Test
public void testCreateAndGetUser() {
// Создание пользователя
User newUser = new User("testUser", "test@example.com");
int userId = given()
.contentType(ContentType.JSON)
.body(newUser)
.when()
.post("/api/users")
.then()
.statusCode(201)
.body("id", notNullValue())
.extract()
.path("id");
// Получение созданного пользователя
given()
.pathParam("id", userId)
.when()
.get("/api/users/{id}")
.then()
.statusCode(200)
.body("username", equalTo("testUser"))
.body("email", equalTo("test@example.com"));
}
Ключевые преимущества REST Assured включают: читаемый DSL-синтаксис, интеграцию с Hamcrest для мощных валидаций, поддерку JsonPath и XmlPath, встроенную сериализацию/десериализацию (Jackson, Gson), легкую интеграцию с JUnit/TestNG, и расширяемость через фильтры и спецификации. Эти особенности делают REST Assured одним из наиболее популярных инструментов для автоматизации тестирования REST API в экосистеме Java.