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

如何在Cypress自动化测试中保持登录状态避免各用例重复登录

Cypress 测试会话保持登录状态实现方案

1. 用cy.session()缓存登录会话(官方推荐)

Cypress 8.0及以上版本内置的cy.session()API专门用来处理会话缓存,同一个测试会话内只会执行一次实际登录逻辑,后续所有用例直接复用缓存的鉴权凭证,不需要重复走登录流程。
首先在cypress/support/commands.js中封装全局登录命令:

Cypress.Commands.add('login', () => {
  // 给当前登录会话指定唯一标识,区分不同账号的登录状态
  cy.session('adminUserSession', () => {
    // 替换为你自己系统的登录操作逻辑
    cy.visit('/login')
    cy.get('input[name="account"]').type('test_admin')
    cy.get('input[name="password"]').type('test_pwd123')
    cy.get('.login-submit-btn').click()
    // 验证登录成功,确保凭证已经生成
    cy.url().should('contain', '/workbench')
  })
})

之后你在任意测试用例中调用cy.login(),整个测试会话只会实际跑一次登录,后续调用直接恢复缓存的Cookie、本地存储等鉴权信息。

2. 低版本Cypress用全局钩子+凭证保留

如果你用的Cypress版本低于8.0不支持cy.session(),可以通过全局前置钩子+保留指定鉴权凭证的方式实现:
首先在cypress/support/e2e.js(旧版本对应index.js)中添加全局钩子:

// 所有测试用例执行前仅执行一次登录
before(() => {
  cy.visit('/login')
  cy.get('input[name="account"]').type('test_admin')
  cy.get('input[name="password"]').type('test_pwd123')
  cy.get('.login-submit-btn').click()
  cy.url().should('contain', '/workbench')
})

// 每个测试用例执行前保留需要的鉴权凭证,避免被Cypress默认清空
beforeEach(() => {
  // 保留Cookie类型的鉴权字段,替换为你系统实际的Cookie名
  Cypress.Cookies.preserveOnce('auth_token', 'session_id')
  // 如果用localStorage存储鉴权信息,添加以下逻辑
  cy.window().then(win => {
    const token = win.localStorage.getItem('auth_token')
    if (token) win.localStorage.setItem('auth_token', token)
  })
})

3. 关闭测试隔离(按需使用)

Cypress默认开启测试隔离,每个用例执行完成后会清空所有页面上下文、存储、Cookie。如果你确认你的测试用例之间不会互相污染,可以直接在cypress.config.js中关闭测试隔离,登录状态会自动在所有用例间共享:

const { defineConfig } = require('cypress')

module.exports = defineConfig({
  e2e: {
    // 关闭测试隔离,用例间共享上下文状态
    testIsolation: false,
    // 其他配置项
    baseUrl: 'https://your-test-domain.com'
  }
})

注意:该方案仅适合测试逻辑简单、用例无互相依赖的场景,复杂项目使用容易出现用例间互相干扰的问题,不优先推荐。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:36:04