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

如何在Cypress多测试用例中用cy.session替代弃用的Cookie保留

解决方案

不需要修改现有测试用例结构,只需替换beforeEach中的Cookie保留逻辑为cy.session,就能在多个it块间保持会话,具体实现如下:

步骤1:替换beforeEach逻辑

移除原有的Cypress.Cookies.defaults配置,改用cy.session来管理会话,确保登录状态仅在首次执行或会话失效时初始化:

beforeEach(() => {
  cy.session('user-auth-session', () => {
    // 执行会话初始化步骤(仅首次运行/会话失效时执行)
    performance.NavigateToUrl(URL);
    performance.LoginUserPass();
    
    // 验证登录成功的核心标志(按需调整,比如检查关键Cookie或页面元素)
    cy.getCookie('somecookie').should('exist');
    cy.getCookie('someOtherCookie').should('exist');
  }, {
    // 每次测试前验证会话有效性,确保Cookie未过期/丢失
    validate() {
      cy.getCookie('somecookie').should('exist');
      cy.getCookie('someOtherCookie').should('exist');
      cy.getCookie('AnotherCookie').should('exist');
    }
  });
});

步骤2:保留原有测试用例结构

原有的it块无需大幅修改,只需根据实际情况调整验证逻辑(避免重复执行登录/导航操作):

it('Navigate to URL', () => {
  // 改为验证当前URL是否正确(因为cy.session已完成导航)
  cy.url().should('include', URL);
  
  // 若必须保留原调用,也可继续使用,但会重复导航(不影响会话状态)
  // performance.NavigateToUrl(URL);
});

it('Login - Username/Pass', () => {
  // 改为验证登录状态(因为cy.session已完成登录)
  cy.get('#user-profile-icon').should('be.visible'); // 示例元素,需替换为实际页面标识
  
  // 若必须保留原调用,可继续使用,但登录操作会被Cypress会话机制跳过(不会重复登录)
  // performance.LoginUserPass();
});

it('Navigate Order Page', () => {
  performance.Orderpage();
});

// 其他测试用例保持不变

原理说明

  • cy.session会在第一个测试用例运行时执行回调内的登录逻辑,后续测试用例运行时,先执行validate方法检查会话有效性:
    • 若会话有效(Cookie存在),则直接复用现有会话,跳过登录步骤;
    • 若会话失效(Cookie丢失/过期),则重新执行回调内的登录逻辑,重建会话。
  • 完全保留原有测试结构,不影响报告生成格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:41:18