Introduction
Handling login smartly saves time by avoiding repeated slow login steps in tests.
Handling login smartly saves time by avoiding repeated slow login steps in tests.
cy.session('user', () => { cy.visit('/login') cy.get('#username').type('myUser') cy.get('#password').type('myPass') cy.get('button[type=submit]').click() })
cy.session() caches login state to reuse in tests.
Use a unique key like username to identify the session.
cy.session('admin', () => { cy.visit('/login') cy.get('#username').type('adminUser') cy.get('#password').type('adminPass') cy.get('button[type=submit]').click() })
cy.session('regularUser', () => { cy.request('POST', '/api/login', { username: 'user', password: 'pass' }) .then((response) => { window.localStorage.setItem('token', response.body.token) }) })
This test suite logs in once per session and reuses it for multiple tests, making tests faster.
describe('Dashboard tests', () => { beforeEach(() => { cy.session('user', () => { cy.visit('/login') cy.get('#username').type('testUser') cy.get('#password').type('testPass') cy.get('button[type=submit]').click() }) }) it('shows user dashboard', () => { cy.visit('/dashboard') cy.contains('Welcome, testUser').should('be.visible') }) it('shows user settings', () => { cy.visit('/settings') cy.contains('Settings').should('be.visible') }) })
Using cy.session() reduces repeated login UI steps.
It improves test speed and reduces flakiness from login failures.
Make sure to clear sessions if login details change.
Login handling caches login to speed up tests.
It avoids repeating slow login steps in every test.
Use cy.session() in Cypress for easy login caching.
cy.session() speed up Cypress test suites?cy.session() doescy.session() caches the login session so Cypress does not need to perform login steps repeatedly.cy.session().cy.session() correctly with a session name and callback.beforeEach(() => {
cy.session('user', () => {
cy.visit('/login')
cy.get('#username').type('user')
cy.get('#password').type('pass')
cy.get('button[type=submit]').click()
})
})
it('checks dashboard', () => {
cy.visit('/dashboard')
cy.contains('Welcome')
})cy.session() behavior in beforeEachcy.session() caches the login session so the login steps run only once, even if called in beforeEach.beforeEach(() => {
cy.session('user', () => {
cy.visit('/login')
cy.get('#username').type('user')
cy.get('#password').type('pass')
cy.get('button[type=submit]').click()
})
})
What is the likely mistake?cy.session() callback requirementscy.session callback -> Option Bcy.session() to optimize speed and reliability?before vs beforeEach hooksbefore runs once before all tests, beforeEach runs before every test.cy.session()cy.session() in before caches login once, speeding up all 10 tests reliably.cy.session() once in a before hook to cache login for all tests -> Option APass the test and this pattern moves unknown