You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cypress中记录API响应时间?选cy.intercept()还是cy.request()?

在Cypress中记录API响应时间的正确方案

问题原因

你当前代码返回undefined是因为req.continue()回调里的res对象,并未直接关联到cy.wait()获取的intercept对象的response属性上,导致无法读取自定义的responseTime字段。

方案一:使用cy.intercept()(拦截页面自动发起的请求)

通过监听请求的response事件来计算响应时间,确保时间值能被挂载到最终的intercept对象中:

cy.intercept('POST', '**/create-insurance-view-model', (req) => {
  // 记录请求开始时间
  req.startTime = Date.now();
  // 监听响应返回事件
  req.on('response', (res) => {
    res.responseTime = Date.now() - req.startTime;
  });
}).as('apiViewModel');

// 等待请求完成并获取响应时间
cy.wait('@apiViewModel').then((intercept) => {
  // 转换为秒并保留两位小数
  const responseTimeSec = (intercept.response.responseTime / 1000).toFixed(2);
  cy.log(`Time to get the license plate data was: ${responseTimeSec} seconds`);
});

方案二:使用cy.request()(手动发起API请求)

如果不需要拦截页面请求,而是直接测试API接口,cy.request()的时间计算会更直观:

// 记录请求开始时间
const startTime = Date.now();

// 手动发起POST请求(需补充请求体参数,如果有)
cy.request('POST', '**/create-insurance-view-model')
  .then((response) => {
    const responseTimeSec = ((Date.now() - startTime) / 1000).toFixed(2);
    cy.log(`Time to get the license plate data was: ${responseTimeSec} seconds`);
    // 可在这里添加响应断言或其他处理逻辑
  });

两者适用场景对比

  • cy.intercept():适合拦截前端页面触发的API请求(如点击按钮后自动发起的请求),可同时修改请求/响应内容,用于测试前端与API的完整交互流程。
  • cy.request():适合单独测试API接口的性能或功能,无需依赖前端页面操作,时间计算逻辑更直接。

内容的提问来源于stack exchange,提问作者FitFju

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:40:32