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

Cypress:如何为测试套件保留会话以避免重复登录?

解决Cypress重复登录耗时问题的方案

由于Cypress.Cookies.preserveOnce()已被移除,现在官方推荐使用cy.session()来复用登录会话,避免每个测试用例重复执行登录和客户选择步骤。以下是具体实现方式:

核心思路

用cy.session()封装登录+客户选择的逻辑,Cypress会自动保存会话状态(Cookie、LocalStorage等),后续测试用例直接复用该会话,无需重复执行前置操作。

修改后的测试代码

describe("Resource Add / Remove", () => {
  beforeEach(() => {
    // 复用登录会话,不存在则创建
    cy.session('my-user-session', () => {
      cy.visit('http://localhost/myapp')
      
      const user = {
        email: EMAIL,
        password: PASSWORD,
      };
      cy.login(user);
      cy.selectCustomer('MyCustomer')
      
      // 验证会话创建成功(可选,确保进入正确页面)
      cy.url().should('include', '/dashboard') // 替换为你的目标页面路径
    });

    // 会话已存在,直接访问应用即可,不会重定向到登录页
    cy.visit('http://localhost/myapp')
  });

  it("should create a new resource", () => {
    const resourceName = "MyResource";
    // 存到Cypress环境变量,供下一个测试用例使用
    Cypress.env('resourceName', resourceName);
    
    // 执行创建资源的逻辑
    // 示例:cy.get('[data-testid="create-resource-btn"]').click()
    // cy.get('[data-testid="resource-name-input"]').type(resourceName)
    // cy.get('[data-testid="submit-btn"]').click()
    
    // 验证资源创建成功
    // cy.get('[data-testid="resource-list"]').should('contain', resourceName)
  });

  it("should delete last created resource", () => {
    const resourceName = Cypress.env('resourceName');
    
    // 执行删除资源的逻辑
    // 示例:cy.get('[data-testid="resource-list"]').contains(resourceName).parent().find('[data-testid="delete-btn"]').click()
    // cy.get('[data-testid="confirm-delete-btn"]').click()
    
    // 验证资源被移除
    // cy.get('[data-testid="resource-list"]').should('not.contain', resourceName)
  });
});

关键细节说明

  • cy.session()的第一个参数是会话的唯一标识(比如用户名或自定义名称),Cypress会根据这个标识判断是否需要重新创建会话。
  • 会话创建的回调函数只会在会话不存在时执行,后续测试用例会直接恢复会话状态。
  • 使用Cypress.env()在测试用例间共享资源名称,避免异步变量传递的问题。
  • 确保cy.login()和cy.selectCustomer()是可靠的自定义命令,能正确完成登录和客户选择操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:22:37