У меня есть тест Cypress, в котором я перехожу на определенную страницу, и эта страница автоматически инициирует несколько запросов. Один из запросов извлекает данные и отображает их в пользовательском интерфейсе. В моем тесте я хочу захватить этот запрос со всеми параметрами и заголовками и воспроизвести его после нажатия кнопки выхода. С помощью этого теста я хочу убедиться, что авторизованные запросы возвращают код ошибки, если они снова вызываются с теми же заголовками аутентификации (файлами cookie) после выхода из системы. Я даже не уверен, возможно ли это через Cypress или нет. На данный момент я провожу этот тест вручную, используя такие инструменты, как Fiddler, Burp Repeater и т. д., и хочу автоматизировать его. Принимаются также предложения по любым другим способам автоматизации таких тестов.
Да, я имел в виду отправить тот же запрос еще раз.

Сначала зафиксируйте запрос, отправленный приложением, с помощью cy.intercept(). Затем используйте cy.request(), чтобы повторно отправить его.
Вы хотите пройти тест, если последний запрос не удался, поэтому я бы попробовал его с failOnStatusCode: false.
Базовая схема будет следующей.
cy.intercept(url, (capturedRequest) => {
cy.request({
...capturedRequest,
failOnStatusCode: false
})
.then(response => {
expect(response.statusCode).to.eq(505) // whatever the failure code is
})
});
cy.get(logoutSelector).click()
Ответ Паоло не сработает, потому что capturedRequest всегда будет undefined. Cypress является асинхронным, поэтому переменная не будет иметь значения к моменту вызова cy.request(), что приведет к сбою.
Правильный способ сделать это:
cy.intercept('*/logout*').as('outRequest'); // Setup intercept and alias to monitor the request
cy.get('#logoutButton').click(); // Initiate the request
cy.wait('@outRequest'); // Wait for the request to come back, this is important
// Resend request and validate status code
cy.get('@outRequest').then((out) => {
cy.request({...out.request, failOnStatusCode: false}).should(response => {
expect(response.status).to.eq(401)
})
})
Когда вы говорите «повторить это», вы имеете в виду отправку другого запроса? Если это так, вы можете сделать это с помощью cy.request().