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

Cypress 12+版本中如何用cy.session替代Cookies.defaults保存JSESSIONID

解决Cypress 12中用cy.session保留JSESSIONID Cookie的问题

直接用下面的写法就能替代原来的Cypress.Cookies.defaults,实现JSESSIONID的缓存:

// 在e2e.js中配置
cy.session('user-login', () => {
  // 发送登录请求,服务器会返回JSESSIONID的Set-Cookie头
  cy.request({
    method: 'POST',
    url: '/login',
    body: { username: '你的用户名', password: '你的密码' }
  });
});

为什么这个写法有效?

当cy.request完成登录请求后,服务器返回的JSESSIONID Cookie会被Cypress自动捕获并存储到当前会话的CookieJar中。cy.session的作用就是缓存这个会话的状态(包括所有Cookie),后续测试用例运行时,Cypress会自动恢复这个Cookie,和你之前用Cypress.Cookies.defaults({ preserve: 'JSESSIONID' })的效果完全一致。

可选:添加会话有效性验证

如果需要确保缓存的会话是有效的,可以给cy.session加上验证逻辑,检查JSESSIONID是否存在:

cy.session('user-login', () => {
  cy.request({
    method: 'POST',
    url: '/login',
    body: { username: '你的用户名', password: '你的密码' }
  });
}, {
  validate() {
    // 验证JSESSIONID Cookie是否存在,确保会话有效
    cy.getCookie('JSESSIONID').should('exist');
  }
});

注意事项

  • 确保/login是正确的请求路径,如果是相对路径,要在cypress.config.js中配置好baseUrl,否则需要写完整的请求URL。
  • 如果有多用户登录场景,可以把username作为cy.session的第一个标识参数,比如cy.session(username, () => {...}),这样不同用户的会话会被分别缓存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:55:20