Основы Cypress: тестирование API |
01.06.2022 00:00 |
Автор: Филип Рик (Filip Hric) Если вы когда-либо тестировали API через Postman или иной инструмент, то это будет элементарной задачей для вас. Cypress – отличный инструмент тестирования, который также может быть полезен при тестировании API. В сегодняшней статье я пройдусь по основам создания API-теста в Cypress. Команда .request() Эта команда – центр тестирования API. Для отправки простого запроса методом GET можно сделать вот что: cy.request('/api/boards') Заметьте, что вам не нужно добавлять метод. Cypress оптимизирует свои команды для максимальной читабельности, поэтому при такой записи запроса он автоматически будет отправлен методом GET. Если вы передаете два аргумента в команду .request(), первый из них будет определен как метод, а второй – как url. cy.request('DELETE', '/api/boards/9873789121') Я также не задаю полный url. Это связано с тем, что /api/boards будет автоматически добавлено к baseUrl, заданному в cypress.json. Команда .request() принимает максимум три аргумента. Третий – это тело запроса. cy.request('POST', '/api/boards', { Этот простой синтаксис очень полезен, если вы хотите отправить пачку запросов к базе данных, чтобы быстро настроить данные для UI-теста. Мой друг Фурбо написал об этом отличную статью. Передача множества атрибутов в команду .request() Если вы хотите передать дополнительные опции или просто дать побольше контекста команде .request(), то можете передать единый объект. Предыдущий запрос можно записать так: cy.request({ Это также дает возможность передавать больше опций – например, заголовки или параметры запроса: cy.request({ Получение данных из запроса После того, как запрос получил ответ от сервера, вы можете получить доступ к этой информации, используя команду .then(). Это вернет различные атрибуты – тело ответа, код статуса, длительность, и т. д. cy.request({ Алиас board, который используется как параметр в функции .then(), можно пропустить, если вы используете деструктуризацию. cy.request({ В этом случае вам не нужно создавать именной алиас каждый раз, когда вам нужно получить данные из запроса. Если вы хотите узнать о деструктуризации больше, прочитайте мои статьи на эту тему. Если вы хотите использовать данные запроса в другом месте теста, посмотрите эту статью о работе с данными API, или эту – об использовании переменных в Cypress. Тестирование данных ответа Теперь, когда мы получили данные от сервера, можно переходить к их тестированию. У Cypress есть библиотека chai, которую можно использовать внутри команды .then() cy.request({ Тело ответа обычно хранится в формате JSON – если вам нужно найти определенный элемент в ответе и проверить его, вам нужен правильный путь. Я подробно писал об этом ранее, но простой пример будет выглядеть примерно так: cy.request({ Вы можете проверять различные атрибуты API-ответа, так как библиотека chai довольно гибкая. К примеру, можно проверить тип контента, наличие определенных элементов, или создать свою собственную функцию для проверки значения. cy.request({ Использование плагина cy-api Cypress открывает браузер при каждом прогоне теста, и это надо иметь в виду, используя Cypress для тестирования API. Вам также нужна консоль браузера, чтобы рассмотреть ответ Cypress детально. Однако при использовании плагина cy-api запрос и ответ рендерятся в окне браузера, поэтому можно легко наблюдать за API даже в GUI-режиме. Этот плагин добавляет команду .api() в вашу библиотеку Cypress, и ее синтаксис очень похож на синтаксис команды .request(). Единственное значимое отличие в том, что вы не можете использовать простой синтаксис, как в начале статьи – вам нужно каждый раз передавать полноценный объект. cy Этот тест покажет вам вот что: Надеюсь, вам понравилось! |