服务端阅读 05月29日 00:52
如何在 Cypress 中用 cy.request() 测试 API 接口?
cy.request() 是 Cypress 内置的 HTTP 请求方法,直接在网络层发送请求,无需经过浏览器渲染,适合独立验证后端逻辑。典型场景:绕过 UI 直接测试 API 返回值和状态码、在 UI 测试前通过 API 预置测试数据(如登录获取 token)、验证认证头和权限控制。最佳实践包括:用 Cypress.env() 管理环境变量避免硬编码 URL、用 failOnStatus: false 测试错误响应、结合 cy.intercept() 模拟后端异常、用 response.duration 断言接口性能。注意 cy.request() 默认 4xx/5xx 会导致测试失败,测试异常场景时必须设置 failOnStatusCode: false。追问cy.request() 和 cy.intercept() 有什么区别?什么时候该配合使用?如何用 cy.request() 实现 UI 测试前的数据预置?比通过 UI 操作准备数据有什么优势?测试需要鉴权的 API 时,如何自动获取并注入 Bearer Token?cy.request() 发送的请求会走浏览器的 CORS 限制吗?为什么?如何对 cy.request() 的响应做 Schema 校验而不只是断言个别字段?写段代码// API 测试:登录 + 鉴权 + 错误场景it('returns 401 with wrong password', () => { cy.request({ url: '/api/login', method: 'POST', body: { user: 'admin', pass: 'wrong' }, failOnStatusCode: false }).its('status').should('eq', 401);});