如何在Cypress多Spec文件分组测试中实现单次登录且不关闭浏览器
实现Cypress分组测试仅登录一次且保持浏览器打开
需求说明
- 现有4个测试用例,全部需要使用相同的登录凭据
- 执行分组测试时,仅需完成一次登录操作
- 测试结束后,Cypress不关闭浏览器
当前配置
在package.json中的脚本配置如下:
{ "scripts": { "groupingspec": "cypress run --spec cypress/integration/specs/OneSpec.js cypress/integration/specs/TwoSpec.js cypress/integration/specs/ThreeSpec.js cypress/integration/specs/FourSpec.js --browser chrome --headed", } }
通过终端执行命令:
npm run groupingspec
解决方案步骤
1. 添加--no-exit参数保持浏览器打开
修改package.json中的脚本,在命令末尾添加--no-exit,确保测试完成后浏览器不会自动关闭:
{ "scripts": { "groupingspec": "cypress run --spec cypress/integration/specs/OneSpec.js cypress/integration/specs/TwoSpec.js cypress/integration/specs/ThreeSpec.js cypress/integration/specs/FourSpec.js --browser chrome --headed --no-exit", } }
2. 使用Cypress Session API实现单次登录
在cypress/support/e2e.js(旧版本为cypress/support/index.js)中添加以下代码,利用Session API在所有测试用例间共享登录状态,仅执行一次登录:
beforeEach(() => { cy.session('user-login', () => { // 替换为你的实际登录逻辑 cy.visit('/login'); cy.get('#username').type('你的用户名'); cy.get('#password').type('你的密码'); cy.get('button[type="submit"]').click(); // 验证登录成功(示例:检查是否跳转到主页) cy.url().should('include', '/dashboard'); }); });
3. 简化测试用例代码
每个测试用例(如OneSpec.js)无需重复编写登录逻辑,直接编写业务测试即可:
// OneSpec.js示例 describe('测试模块一', () => { it('测试功能A', () => { cy.visit('/feature-a'); // 执行具体测试操作 }); });
原理说明
--no-exit参数:阻止Cypress在测试完成后终止浏览器进程,保持窗口打开状态。- Session API:Cypress会缓存登录后的会话数据(包括Cookies、LocalStorage等),后续测试用例执行时自动恢复登录状态,避免重复登录;若会话过期,会自动重新执行登录流程。
内容的提问来源于stack exchange,提问作者Jigar Tanna
相关产品推荐
相关产品推荐

