Тесты 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 по следующей ссылке.
Вы можете получить доступ к демонстрационному проекту, который я подготовил для вас, по ссылке на репозиторий.
О том, чтобы быть вместе в нашей следующей статье.
Следите за обновлениями