如何捕获网络请求和重播它与相同的标题在柏树?



我有一个Cypress测试,我导航到一个特定的页面,该页面自动发起多个请求。其中一个请求获取数据并显示在UI上。在我的测试中,我想用所有参数和标题捕获该请求,并在单击注销按钮后重播该请求。对于这个测试,我希望确保在注销后使用相同的身份验证头(cookie)再次调用授权请求时,它们会返回一个错误代码。我甚至不确定这是否可能通过柏树或不。到目前为止,我使用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()

Paolo的答案行不通,因为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)
})
})

最新更新