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

如何在Cypress不同测试文件间共享拦截请求获取的别名数据?

Cypress跨测试文件共享拦截请求数据的实现方法

核心思路

利用Cypress的cy.task在Node环境中存储共享数据,实现测试文件间的数据传递。cy.task运行在Node上下文,不受单个测试文件作用域限制,可跨文件共享数据。

步骤1:配置Cypress任务(cypress.config.js)

在项目根目录的cypress.config.js中定义存储和读取数据的任务:

const { defineConfig } = require("cypress");

// 用于存储跨文件共享的数据
let sharedData = {};

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      on('task', {
        // 存储数据
        setSharedData: ({ key, value }) => {
          sharedData[key] = value;
          return null;
        },
        // 读取数据
        getSharedData: (key) => {
          return sharedData[key] || null;
        }
      });
    },
  },
});

步骤2:在第一个测试文件中存储数据

先修正你代码中的别名不一致问题(拦截别名是@abccreateQuote,等待时要对应),获取报价ID后通过cy.task存储:

// 拦截创建报价的请求
cy.intercept('POST', '**/quotes').as('abccreateQuote');

// 执行创建报价的操作(比如填写表单、点击提交按钮)

// 等待请求完成,提取并存储报价ID
cy.wait('@abccreateQuote').then(({ response }) => {
  if (response?.statusCode === 201) {
    const quoteId = response.body.data.id;
    cy.task('setSharedData', { key: 'abcQuoteId', value: quoteId });
  }  
});

步骤3:在其他测试文件中读取并使用数据

通过cy.task读取存储的报价ID,再用于访问页面:

// 读取共享的报价ID
cy.task('getSharedData', 'abcQuoteId').then((abcQuoteId) => {
  if (abcQuoteId) {
    cy.visit(`quotes/${abcQuoteId}/show`);
    // 这里可以添加页面断言或后续操作
  } else {
    throw new Error('未获取到有效报价ID,请确保先执行创建报价的测试用例');
  }
});

注意事项

  • 测试执行顺序:必须保证存储数据的测试文件先运行,否则读取时会获取到null。可在cypress.config.js中通过testFiles配置执行顺序,比如:
    testFiles: [
      'create-quote.spec.js',
      'view-quote.spec.js'
    ]
    
  • 数据生命周期:存储的数据仅在当前Cypress运行会话中有效,重新启动Cypress后会清空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:00:56