Тесты API используются для проверки правильности работы API. Такие тесты могут проверить, отвечает ли API на конкретный URL-адрес запроса, верны ли данные, возвращаемые ответом, и правильно ли реагирует API на ошибки. Cypress предоставляет способ выполнения тестов API с помощью команды cy.request(). Эта команда позволяет отправлять HTTP-запросы и тестировать ответы. При выполнении тестов API с помощью Cypress вы можете использовать тот же тестовый интерфейс Cypress для написания тестового кода и анализа результатов. Это позволяет быстро выполнять тесты API и легко просматривать результаты.

Чтобы начать писать тесты с помощью JavaScript и Cypress, выполните следующие действия:

# Node.js
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
sudo apt-get install -y nodejs

# Cypress
npm install cypress

Создайте файл для написания тестов. Вы можете назвать его как-то вроде userTests.cy.js.

Напишите свои тесты, используя функции describe() и it(). Функция describe() представляет блок тестов, сгруппированных вместе, а функции it() представляют отдельные тесты в этом блоке.

describe("GET /v2/user", function() {
 it("TC", function () {
 // Test Cases
 });
it("POST /v2/user/{userName}", function () {
 // Test Cases
 });
});

В своих тестах выполняйте вызовы API, используя такие функции запроса, как GET, POST, PUT, PATCH,или DELETE.

cy.request('GET', 'https://petstore.swagger.io/v2/user/testqauser21')

Проверьте ответы на ваши запросы с помощью функции expect(). Например, вы можете ожидать, что код состояния ответа будет 200 (ОК):

const userName = 'testqauser21'

cy.request('GET', `https://petstore.swagger.io/v2/user/`+userName)
    .then((response) => {
      expect(response.status).to.eq(200)
    })

Коды состояния HTTP — это трехзначные числовые коды, которые указывают, как веб-сервер ответил на HTTP-запрос.

  • 200 OK:запрос успешно обработан, и в ответ сервер отправил ожидаемые данные.
  • 301 Перемещен навсегда. Запрошенный ресурс был окончательно перемещен на другой URL-адрес.
  • 400 Bad Request:сервер не может понять запрос, так как он неправильно сформирован или недействителен.
  • 401 Unauthorized:запрос был отклонен сервером, поскольку он требует аутентификации.
  • 404 Not Found: Запрошенный ресурс не найден на сервере.
  • 403 Forbidden: сервер отказался обрабатывать запрос клиента, поскольку клиент не смог обеспечить правильную аутентификацию или попытался получить доступ к запрещенному ресурсу.
  • Внутренняя ошибка сервера 500: сервер обнаружил ошибку при обработке запроса.
  • 503 Служба недоступна. Сервер не может обработать запрос клиента или ответить на него, как правило, из-за перегрузки сервера, работ по техническому обслуживанию или временного отключения службы.

Cypress позволяет отправлять такие параметры, как тело запроса, заголовок и строку запроса (qs) при создании HTTP-запросов.

Как показано в приведенном ниже примере кода, вы можете отправлять тело и заголовки запроса при создании запроса POST:

      const postData = {
        "id": 78799781,
        "username": "testqauser21",
        "firstName": "test",
        "lastName": "qa",
        "email": "[email protected]",
        "password": "test123",
        "phone": "54545454545",
        "userStatus": 1
      }
      const headers = {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9'
      }

      cy.request({
        method: 'POST',
        url: 'https://petstore.swagger.io/v2/user',
        body: postData,
        headers: headers
      })
      .then((response) => {
        expect(response.status).to.eq(200)
      })

Вы также можете отправлять значения строки запроса (qs) при создании запроса таким же образом.

const userName = 'testqauser21'
    const qsParams = {
      param1: 'test1',
      param2: 'test2'
    }
    cy.request('GET', `https://petstore.swagger.io/v2/user/`+userName, {
      query: qsParams
    })
    .then((response) => {
      expect(response.status).to.eq(200)
    })

После создания документации вы можете запустить файл userTests.cy.js с помощью следующей команды:

npx cypress run

При выполнении команды «npx cypress run» ваши тесты будут запущены, и в качестве выходных данных будет отображаться отчет, показывающий, были ли тесты пройдены или не пройдены.

 Petstore API TESTING
    √ POST /v2/user (User Create) (993ms)
    √ PUT /v2/user/{username} (User Update) (220ms)
    √ GET /v2/user/{userName} (243ms)
    √ GET /v2/user/login} (224ms)
    √ Delete /v2/user/ (User Delete) (223ms)
    1) GET /v2/user/{userName}
    √ GET /v2/user/logout (207ms)


  6 passing (3s)
  1 failing

  1) Petstore API TESTING
       GET /v2/user/{userName}:
     CypressError: `cy.request()` failed on:

https://petstore.swagger.io/v2/user/testqa7451656

The response we received from your web server was:

  > 404: Not Found

This was considered a failure because the status code was not `2xx` or `3xx`.

If you do not want status codes to cause failures pass the option: `failOnStatusCode: false`

  (Results)

  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ Tests:        7                                                                                │
  │ Passing:      6                                                                                │
  │ Failing:      1                                                                                │
  │ Pending:      0                                                                                │
  │ Skipped:      0                                                                                │
  │ Screenshots:  1                                                                                │
  │ Video:        true                                                                             │
  │ Duration:     2 seconds                                                                        │
  │ Spec Ran:     UserTests.cy.js                                                                  │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘


  (Screenshots)

  -  cypress-api-testing\cypress\screenshots\     (1280x720)
     UserTests.cy.js\Petstore API TESTING -- GET v2user{userName} (failed).png


  (Video)

  -  Started processing:  Compressing to 32 CRF
  -  Finished processing: 0 seconds

  -  Video output: cypress-api-testing\cypress\videos\UserTests.cy.js.mp4


====================================================================================================

  (Run Finished)


       Spec                                              Tests  Passing  Failing  Pending  Skipped
  ┌────────────────────────────────────────────────────────────────────────────────────────────────┐
  │ ×  UserTests.cy.js                          00:02        7        6        1        -        - │
  └────────────────────────────────────────────────────────────────────────────────────────────────┘
    ×  1 of 1 failed (100%)                     00:02        7        6        1        -        -

Эти выходные данные показывают, были ли тесты пройдены или нет, а также сообщения об ошибках для неудачных тестов.

npx cypress open

Когда вы выполните команду «npx cypress open», вы сможете запустить свои тесты, и в качестве вывода будет отображаться панель мониторинга, показывающая, прошли ли тесты или нет.

Вы можете найти больше информации о Cypress по следующей ссылке.



Вы можете получить доступ к демонстрационному проекту, который я подготовил для вас, по ссылке на репозиторий.



О том, чтобы быть вместе в нашей следующей статье.

Следите за обновлениями