Cypress 12+版本中如何用cy.session替代Cookies.defaults保存JSESSIONID
直接用下面的写法就能替代原来的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
相关产品推荐
相关产品推荐

