Cypress помогает QA-инженерам писать тестовые примеры быстрее и надежнее, а также очень легко и быстро настраивается. Благодаря удобной для пользователя структуре Cypress во многих отношениях упростил автоматизацию и требует минимальной настройки, прежде чем вы начнете писать свои тесты. Почти всегда есть плагин практически для любой задачи, которую традиционные фреймворки требуют, чтобы пользователи написали сами.

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

Точно так же, обычно выполняя веб-автоматизацию, вы можете проверять информацию пользовательского интерфейса, но не можете напрямую проверять ответы API. Таким образом, вы можете столкнуться с ситуацией, когда вам необходимо периодически тестировать некоторые сетевые запросы вашего веб-приложения. Cypress может помочь пользователям протестировать HTTP-запросы всего жизненного цикла, выполняемые в приложении. Вы можете получить доступ к различным частям HTTP-запроса для получения данных или создания утверждений. Например, вам может потребоваться утвердить тело запроса, URL-адрес, заголовки, код состояния и т. д. Он также обеспечивает поддержку имитационных запросов и запросов-заглушек.

Этот документ содержит краткий обзор того, как ознакомиться с перехватом сетевых запросов в Cypress. В качестве предварительных условий вы должны быть знакомы со структурой платформы Cypress и способами ее настройки, а также иметь базовые знания о HTTP-запросах. В ознакомительных целях мы рассмотрим отслеживание сетевых запросов с помощью команды intercept().

cy.intercept()

Команда cy.intercept() доступна для использования в Cypress версии 6.0.0 и выше. Мы используем команду cy.intercept() для перехвата сетевых запросов. Команда intercept() имеет несколько синтаксисов, которые можно использовать по мере необходимости. Обычно для целей шпионажа мы используем следующие три:

cy.intercept(url)

cy.intercept (метод, URL)

cy.intercept(routeMatcher)

В качестве примера предположим, что при входе в систему выполняется вызов, и мы хотим получить токен доступа, когда пользователь входит на веб-сайт, который мы хотим передать другому запросу для целей тестирования. Этого можно достичь несколькими способами. Предполагается, что baseURL хранится в cypress.json.

Как показано в приведенном ниже примере, вам нужно добавить команду перехвата перед событием, запускающим ее, чтобы ее можно было найти при выполнении. Здесь у нас есть запрос POST с конечной точкой «login», он объявлен и сохранен как псевдоним loginRequest.

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

На этот псевдоним, который мы определили, теперь можно ссылаться через cy.wait().

Теперь есть несколько способов получить доступ к сведениям об этой конечной точке. Вы можете использовать команду «its()», чтобы делать утверждения для данных ответа. В этом случае утверждается, что код состояния должен быть равен 200.

Другой способ сделать это — использовать команду should(), а затем использовать функцию стрелки для доступа к возвращаемому объекту. В этом примере нам нужен токен в ответе. Мы можем сделать это следующим образом:

Точно так же мы можем добавлять утверждения по мере необходимости в ответ. В приведенном ниже примере мы сделали утверждение для параметра сообщения об успехе, чтобы убедиться, что он равен «true». Мы также сохранили токен доступа в константе и использовали cy.wrap() для хранения этой информации, а затем сохранили его как псевдоним для использования в будущих тестах.

Теперь вы можете использовать токен, который мы сохранили в созданной переменной, и получить к нему доступ, используя объявленный псевдоним. Например, вы можете сохранить его как переменную среды и использовать в любых вызовах в файле commands.js. Вы также можете использовать команду cy.intercept() непосредственно в файле commands.js для повторного использования.

Обычно Cypress используется для автоматизации пользовательского интерфейса, но благодаря поддержке вызовов API и перехвату сетевых запросов это действительно очень полезный инструмент для охвата различных областей вашего приложения. Благодаря функции перехвата у вас есть возможность отслеживать сетевые запросы и заглушать ответы или позволять им фактически попадать на сервер. Это особенно полезно и удобно, поскольку позволяет пользователю контролировать тело ответа на запрос, заголовки и статус.