REST assured – це java бібліотека для автоматизації тестування API. Надає можливість відправляти запити та перевіряти відповіді від вашого API.

Для прикладу тесту я буду використовувати демо API https://reqres.in/ , а саме POST запит Create. Документація запиту:

Опис тесту:

  • відправити POST запит з валідними даними на /api/users
  • перевірити, що код відповіді становить 201
  • перевірити, що поля name та job в body відповіді співпадають зі значеннями, котрі були відправлені в body запиту

Створюю звичайний maven проект:

В pom файл проекту додаю чотири залежності:

<dependencies>

    <dependency>
        <groupId>io.rest-assured</groupId>
        <artifactId>rest-assured</artifactId>
        <version>5.3.2</version>
    </dependency>

    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>7.8.0</version>
    </dependency>

    <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest</artifactId>
        <version>2.2</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.15.2</version>
    </dependency>

</dependencies>

  • rest-assured – сама бібліотека для виконання запитів та отримання відповідей від API
  • testng – фреймворк для написання і виконання тестів
  • hamcrest – бібліотека matchers, знадобиться під час перевірки response body
  • jackson-databind – знадобиться для серіалізації Java об’єкту в JSON, під час передачі в request body необхідних даних

Створюю record User з полями name та job, які будуть містити значення для body запиту:

public record User(String name, String job) {}

Детальніше про java records можна подивитись в нотатці Java Records – короткий опис та приклад використання

Сам тест з використанням бібліотеки rest-assured в базовій варіації має структуру, яка складається з трьох ключових секцій given, when та then:

  • given – конфігурує що і куди буде відправлено
  • when – виконання самого запиту з визначеними HTTP методом та кінцевим ендпоінтом
  • then – отримання та перевірка відповіді

В тестовому класі SimpleApiTest створюю тест createUserTest:

package wiki.it.notes.api.tests;

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

import org.testng.annotations.Test;


public class SimpleApiTest {

    @Test
    void createUserTest() {
        var user = new User("Gunnar", "manager");

        given()
                .baseUri("https://reqres.in/api/")
                .contentType("application/json")
                .body(user)
                .when()
                .post("users")
                .then()
                .statusCode(201)
                .body("name", equalTo(user.name()))
                .body("job", equalTo(user.job()));
    }
}

  • для зручності використання rest-assured та hamcrest роблю статичний імпорт io.restassured.RestAssured.* та org.hamcrest.Matchers.* (рядки 3-4)
  • створюю об’єкт User з полями name та job
  • викликом given() починаю формувати запит, встановлюю базовий URL, Content-Type, body (рядки 15-18)
  • в body запиту передаю об’єкт User, котрий за допомогою jackson-databind буде автоматично конвертовано в необхідний JSON з полями name та job
  • далі йде відправка методу post на ендпоінт /users
  • викликом then() переходжу до перевірки відповіді на запит (рядки 22-24)
  • при перевірці response body, для доступу до значення окремого поля, достатньо просто передати його назву в якості першого параметру (“name”, “job”)
  • equalTo – hamcrest matcher за допомогою якого відбувається порівняння значення поля з JSON та очікуваного значення, яке береться з об’єкту User

Результат виконання:

Код прикладу на Github:

rest-assured-examples


Мітки: