Рубрики
Без рубрики

Тестирование API с помощью Java и БУДЬТЕ уверены (и The Beatles)

Будьте уверены, это библиотека Java с открытым исходным кодом, которая используется при создании автоматических тестов для REST endpo… С тегами java, тестирование, учебник, the beatles.

Тестирование API с помощью Java и БУДЬТЕ уверены (серия из 4 частей)

Будьте уверены, это библиотека Java с открытым исходным кодом, которая используется при создании автоматических тестов для конечных точек REST. В моем предыдущем посте “Будьте уверены” я рассказал о том, как настроить вашу среду и как выполнить пару базовых тестов “Будьте уверены”.

В этом посте я хочу рассказать о некоторых дополнительных функциях REST Assured и привести примеры того, как вы можете использовать его в своем автоматизированном тестировании API.

В качестве бонуса вы можете узнать кое-что об альбомах из Битлз !

В моей предыдущей статье мы использовали общедоступные конечные точки REST для наших тестов. Для этой статьи я хочу построить тесты для конечных точек, которые я создаю и определяю. Для этого я собираюсь быстро настроить свои собственные конечные точки локально, используя инструмент с открытым исходным кодом под названием JSON server .

Чтобы получить эту настройку на вашем компьютере:

  • Установите json-сервер локально с помощью npm install-g json-сервер
  • Создайте файл с именем music-db.json и вставьте в него следующее:
{
  "albums": [
    {
      "id": 1,
      "artist": "The Beatles",
      "title": "Please Please Me",
      "year": "1963"
    },
    {
      "id": 2,
      "artist": "The Beatles",
      "title": "With the Beatles",
      "year": "1963"
    },
    {
      "id": 3,
      "artist": "The Beatles",
      "title": "A Hard Day's Night",
      "year": "1964"
    },
    {
      "id": 4,
      "artist": "The Beatles",
      "title": "Beatles for Sale",
      "year": "1964"
    },
    {
      "id": 5,
      "artist": "The Beatles",
      "title": "Help!",
      "year": "1965"
    }
  ]
}
  • Из командной строки json-сервер --смотреть музыку-db.json
  • Теперь у вас должна быть конечная точка API в http://localhost:3000/albums , и может просматривать эти данные в вашем браузере:

В дополнение к предоставлению конечной точки для извлечения ваших данных, сервер JSON позволяет вам отправлять, РАЗМЕЩАТЬ, ИСПРАВЛЯТЬ или УДАЛЯТЬ запросы, что делает его идеальным решением для издевательств над конечными точками.

С помощью сервера JSON вы можете начать создание теста для конечных точек API до того, как разработчик реализует конечную точку. Вы можете легко имитировать ожидаемые ответы, и как только API будет реализован, ваши тесты могут указывать на эту реализацию вместо сервера JSON. Автоматизация разработки и тестирования API может происходить параллельно.

Теперь давайте создадим несколько тестов!

Если вам все еще нужно настроить тестовый проект, вы можете взглянуть на мой первый пост “Будьте уверены”.

Прежде чем мы зайдем слишком далеко, давайте установим базовый уровень для наших тестов. Мы установим базовое значение один раз с тегом тестирования @BeforeClass :

    @BeforeClass
    public void setup() {
        RestAssured.baseURI = "http://localhost";
        RestAssured.port = 3000;
    }

API-интерфейсы REST позволяют извлекать данные для определенного элемента с помощью идентификатора, и идентификатор может быть передан в качестве параметра пути или параметра строки запроса.

Параметр пути

В наших примерах данных, если мы просто хотим вернуть данные для идентификатора 2, мы можем использовать такой параметр пути: http://localhost:3000/albums/2

Давайте создадим для этого надежный тест и убедимся, что название альбома соответствует нашим ожиданиям.

Создайте новый тест в своем тестовом классе:

@Test
    public void queryParamExample() {

        String idToGet = "2";
        String expectedTitle = "With the Beatles";

        // @formatter:off
        given().
                param("id", idToGet).
        when().
                get("albums").
        then().
                assertThat().
                body("title[0]", equalToIgnoringCase(expectedTitle));
        // @formatter:on
    }

Этот тест заключается в получении идентификатора альбома 2 и проверке названия “С Битлз”. Идите вперед и проведите тест. Он должен быть зеленым.

Конечно, я никогда не доверяю зеленому тесту, поэтому внесите временное изменение в идентификатор или ожидаемый заголовок и убедитесь, что он не работает. Например, если я изменю ожидаемый заголовок на что-то вроде "С обезьянами" , я должен получить неудачный тест и ошибку, подобную этой:

Параметр строки запроса

В дополнение к использованию параметра path мы можем использовать параметр строки запроса, например: http://localhost:3000/albums?id=2

Конечно, мы не ограничиваемся только получением данных по идентификатору. Мы также можем извлекать данные по другим полям, таким как название товара: http://localhost:3000/albums?title = С%20%20 ударов

Теперь давайте создадим тест для этого:

@Test
    public void queryParamExample() {

        Integer expectedId = 2;
        String titleToGet = "With the Beatles";

        // @formatter:off
        given().
                param("title", titleToGet).
        when().
                get("albums").
        then().
                assertThat().
                body("id[0]", equalTo(expectedId));
        // @formatter:on
    }

Это вариант предыдущего теста, так как мы извлекаем данные по названию и проверяем идентификатор.

Оба этих теста содержат жестко закодированные тестовые данные, что, как правило, не идеально. Давайте попробуем другую стратегию.

В этом примере мы сделаем 2 вызова API. 1-й вызов просто получает все альбомы и извлекает ответ json для объекта ответа.

2-й вызов извлекает один альбом по идентификатору, а затем утверждает, что название альбома совпадает с названием альбома, которое было извлечено при первом вызове.

@Test
    public void extractDataAndPassToNextAPICall() {

        // @formatter:off
        Response response = given().
                            when().
                                get("albums").
                            then().
                                extract().
                                    response();
        String validId = response.jsonPath().getString("id[0]");
        String validTitle = response.jsonPath().getString("title[0]");

        given().
                pathParam("id", validId).
        when().
                get("albums/{id}").
        then().
                assertThat().
                body("title", equalTo(validTitle));
        // @formatter:on
    }

С помощью этой стратегии первый вызов используется для извлечения достоверных тестовых данных, чтобы мы могли подтвердить, что 2-й вызов возвращает правильные данные. Поскольку мы делаем это без жестко запрограммированных тестовых данных, изменения базовых данных не приведут к сбою теста.

В дополнение к тестированию конечных точек GET, мы также можем тестировать записи и удаления. Давайте создадим тест, который публикует новый альбом и проверяет ответ.

@Test
    public void postNewAlbum() {

        Header acceptJson = new Header("Accept", "application/json");

        JSONObject requestParams = new JSONObject();
        requestParams.put("artist", "The Beatles");
        requestParams.put("title", "Rubber Soul");
        requestParams.put("year", "1965");

        // @formatter:off
        //add the new album
        Response response =
                given().
                    contentType(ContentType.JSON).
                    body(requestParams.toString()).
                when().
                    post("/albums").
                then().
                    statusCode(201).
                    body("$", hasKey("id")).
                    body("title",equalTo("Rubber Soul")).
                    body("year",equalTo("1965")).
                    extract().response();
        // @formatter:on
    }

С помощью этого теста мы ПУБЛИКУЕМ данные, относящиеся к нашему новому альбому. Мы делаем это, создавая новый JSONObject с исполнителем, названием и годом выпуска нового альбома. Затем этот объект добавляется в тело в заданный раздел теста.

Вам нужно будет добавить зависимость в свой POM-файл, чтобы получить ссылку на JSONObject:

        
            top.jfunc.common
            converter
            1.8.0
        

В разделе затем мы проверяем, что данные были успешно опубликованы. Мы делаем это, сравнивая данные, возвращаемые в ответе, с данными, которые мы первоначально отправили. Продолжайте и запустите этот тест, он должен быть зеленым. Как всегда, измените что-нибудь, чтобы быть уверенным, что оно не сработает, когда должно.

Теперь мы можем создать тест, который проверяет УДАЛЕНИЕ. Поскольку мы уже добавляем новый альбом, давайте удалим его, как только он будет добавлен:

@Test
    public void postNewAlbumThenDelete() {

        Header acceptJson = new Header("Accept", "application/json");

        JSONObject requestParams = new JSONObject();
        requestParams.put("artist", "The Beatles");
        requestParams.put("title", "A Hard Day's Night");
        requestParams.put("year", "1964");

        // @formatter:off
        //add the new album
        Response response =
                given().
                    contentType(ContentType.JSON).
                    body(requestParams.toString()).
                when().
                    post("/albums").
                then().
                    statusCode(201).
                    body("$", hasKey("id")).
                    body("title",equalTo("A Hard Day's Night")).
                    body("year",equalTo("1964")).
                    extract().response();

        //delete album that was just added
        given().
            contentType(ContentType.JSON).
            body(requestParams.toString()).
        when().
            delete("/albums/" + response.jsonPath().getInt("id")).
        then().
            statusCode(200);

        //try to get the album we just deleted
        given().
        when().
            get("/albums/" + response.jsonPath().getInt("id")).
       then().
            statusCode(404);

        // @formatter:on
    }

С помощью этого теста у нас есть 3 вызова API:

  • добавить новый альбом
  • удалите новый альбом и убедитесь, что код состояния равен 200
  • получите альбом, который был только что удален, и убедитесь, что он не существует

С помощью этой статьи вы должны хорошо начать использовать REST Assured для тестирования конечных точек API. Конечно, в этом есть гораздо больше, чем основы, которые я описал, так что продолжайте и проведите еще несколько исследований самостоятельно на официальном БУДЬТЕ уверены, веб-сайте . В Интернете есть множество ресурсов.

И если вы пришли к этой статье за информацией о Битлз, то на данный момент вы, скорее всего, разочарованы. Хорошие новости, однако, есть больше альбомов, чем упомянутые выше, так что загляните в Интернет !

Вы можете найти полный код для этой серии сообщений в блоге в мой проект на Github .

В будущих сообщениях я буду рассматривать проверку схемы JSON и отчетов, поэтому следите за обновлениями.

Тестирование API с помощью Java и БУДЬТЕ уверены (серия из 4 частей)

Оригинал: “https://dev.to/leading-edje/api-testing-with-java-and-the-beatles-4624”