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

如何让Cypress每次使用不同用户登录,避免Cy.session复用会话?

问题根源

你的cy.session使用了固定的'sessionId'作为会话标识,Cypress会将所有用户的登录会话缓存到同一个标识下,导致后续测试复用第一个用户的会话,不会重新登录新用户。

解决方案

核心是给每个用户分配唯一的会话标识,让Cypress为不同用户单独缓存会话。同时要处理特殊用户(如锁定用户)的登录验证逻辑。

1. 修改Login页面对象的login方法

将会话标识从固定字符串改为传入的username,并根据用户类型调整登录后的断言:

login(username, password) {
  // 用用户名作为会话唯一标识,每个用户独立缓存
  cy.session(username, () => {
    cy.visit('/');
    this.getUsername().type(username);
    this.getPassword().type(password);
    this.getLoginButton().click();
    
    // 针对不同用户的登录结果做断言
    if (username === 'locked_out_user') {
      cy.url().should('not.contain', '/inventory.html');
      cy.get('[data-test="error"]').should('be.visible');
    } else {
      cy.url().should('contain', '/inventory.html');
    }
  }, {
    validate: () => {
      const currentUser = Cypress.env('currentUser');
      // 验证会话有效性,适配不同用户场景
      if (currentUser === 'locked_out_user') {
        cy.visit('/');
        cy.get('[data-test="error"]').should('not.exist');
      } else {
        cy.url().should('contain', '/inventory.html');
      }
    }
  })
}

2. 调整测试用例代码

在循环测试时,将当前用户信息存入环境变量,供会话验证逻辑使用:

describe('All users', () => {
  const login_page = new LoginPage();
  const users = Cypress.env("users");

  Cypress._.each(users, (user, userType) => {
    it(`works for ${userType} user`, () => {
      cy.log(user.username);
      // 传递当前用户信息到环境变量,供session验证使用
      Cypress.env('currentUser', user.username);
      login_page.login(user.username, user.password);
      
      // 针对不同用户添加专属测试逻辑
      if (user.username === 'locked_out_user') {
        cy.get('[data-test="error"]')
          .should('have.text', 'Epic sadface: Sorry, this user has been locked out.');
      } else {
        cy.get('.inventory_list').should('be.visible');
      }
    });
  }) 
});
额外说明
  • 对于locked_out_user这类登录失败的用户,cy.session不会缓存其会话,每次测试都会重新执行登录步骤,符合测试预期。
  • 如果不需要为失败登录的用户启用会话缓存,可以在测试中判断用户类型,直接跳过cy.session逻辑,执行原生登录流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:35:29