如何用cy.session()替代Cypress.Cookies.defaults()存储唯一ID
使用cy.session()持久化唯一ID的方案
基础实现逻辑
在测试的beforeEach钩子中配置session,Cypress会自动复用已存在的session,避免重复生成唯一ID:
beforeEach(() => { cy.session('unique-id-session', () => { // 替换成你实际生成唯一ID的逻辑 const uniqueId = 'your-custom-unique-id'; // 将ID存入cookie,保持和之前逻辑一致 cy.setCookie('uniqueId', uniqueId); }, { // 验证session有效性,确保uniqueId cookie存在 validate() { cy.getCookie('uniqueId').should('exist'); } }); });
核心要点
- 第一个参数
'unique-id-session'是session的唯一标识,Cypress依靠它判断是否复用已有session - 初始化函数仅在session首次创建时执行一次,生成并存储uniqueId
validate选项用于校验session是否有效,防止复用失效的session
接口获取uniqueId的场景
如果你的唯一ID是通过接口请求获取的,直接把请求逻辑放到初始化函数里即可:
beforeEach(() => { cy.session('unique-id-session', () => { cy.request('POST', '/api/unique-id') .then(res => { const uniqueId = res.body.uniqueId; cy.setCookie('uniqueId', uniqueId); }); }, { validate() { cy.getCookie('uniqueId').should('exist'); } }); });
测试中直接调用uniqueId
如果需要在测试代码中直接使用这个ID,可以把它存入Cypress环境变量:
beforeEach(() => { cy.session('unique-id-session', () => { const uniqueId = 'your-custom-unique-id'; cy.setCookie('uniqueId', uniqueId); // 存入环境变量,方便测试逻辑调用 Cypress.env('uniqueId', uniqueId); }, { validate() { cy.getCookie('uniqueId').should('exist'); expect(Cypress.env('uniqueId')).to.exist; } }); }); // 测试用例中使用 it('验证唯一ID的业务逻辑', () => { cy.log(`当前使用的唯一ID:${Cypress.env('uniqueId')}`); // 其他测试步骤... });
内容的提问来源于stack exchange,提问作者Kieran M
相关产品推荐
相关产品推荐

