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

如何用cy.session()替代Cypress.Cookies.defaults()存储唯一ID

使用cy.session()持久化唯一ID的方案

基础实现逻辑

在测试的beforeEach钩子中配置session,Cypress会自动复用已存在的session,避免重复生成唯一ID:

beforeEach(() => {
  cy.session('unique-id-session', () => {
    // 替换成你实际生成唯一ID的逻辑
    const uniqueId = 'your-custom-unique-id';
    // 将ID存入cookie,保持和之前逻辑一致
    cy.setCookie('uniqueId', uniqueId);
  }, {
    // 验证session有效性,确保uniqueId cookie存在
    validate() {
      cy.getCookie('uniqueId').should('exist');
    }
  });
});

核心要点

  • 第一个参数'unique-id-session'是session的唯一标识,Cypress依靠它判断是否复用已有session
  • 初始化函数仅在session首次创建时执行一次,生成并存储uniqueId
  • validate选项用于校验session是否有效,防止复用失效的session

接口获取uniqueId的场景

如果你的唯一ID是通过接口请求获取的,直接把请求逻辑放到初始化函数里即可:

beforeEach(() => {
  cy.session('unique-id-session', () => {
    cy.request('POST', '/api/unique-id')
      .then(res => {
        const uniqueId = res.body.uniqueId;
        cy.setCookie('uniqueId', uniqueId);
      });
  }, {
    validate() {
      cy.getCookie('uniqueId').should('exist');
    }
  });
});

测试中直接调用uniqueId

如果需要在测试代码中直接使用这个ID,可以把它存入Cypress环境变量:

beforeEach(() => {
  cy.session('unique-id-session', () => {
    const uniqueId = 'your-custom-unique-id';
    cy.setCookie('uniqueId', uniqueId);
    // 存入环境变量,方便测试逻辑调用
    Cypress.env('uniqueId', uniqueId);
  }, {
    validate() {
      cy.getCookie('uniqueId').should('exist');
      expect(Cypress.env('uniqueId')).to.exist;
    }
  });
});

// 测试用例中使用
it('验证唯一ID的业务逻辑', () => {
  cy.log(`当前使用的唯一ID:${Cypress.env('uniqueId')}`);
  // 其他测试步骤...
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:55:15