Se você trabalha com automação de testes E2E, provavelmente já utiliza o Cypress no seu dia a dia. Mas será que está explorando todo o potencial da ferramenta?
Neste artigo do SW Academy, você vai aprender hacks de produtividade cypress que reduzem tempo de execução, evitam flakiness e aumentam a eficiência do time de QA. Temos também um artigo sobre comandos básicos mais utilizados do Cypress! Clique aqui para ler.
1. Use cy.session() para evitar login repetido
Desde a versão 9.6+, o Cypress permite reutilizar sessões de login.
cy.session('usuario-logado', () => {
cy.login()
})
Benefícios:
- Reduz drasticamente o tempo de execução
- Evita sobrecarga desnecessária na aplicação
- Testes mais rápidos no CI
Ideal para pipelines longos.
2. Intercepte requisições com cy.intercept()
Em vez de depender sempre do backend:
cy.intercept('GET', '/api/users', { fixture: 'users.json' })
Por que isso aumenta produtividade?
- Elimina dependência externa
- Reduz flakiness
- Testes executam até 70% mais rápido
3. Prefira data-testid ao invés de seletores frágeis
Evite:
cy.get('.btn-primary:nth-child(2)')
Prefira:
cy.get('[data-testid="btn-submit"]')
Isso reduz manutenção e quebra de testes após refatorações visuais.
4. Nunca use cy.wait(3000)
Esse é um dos maiores anti-patterns.
Use:
cy.intercept('/api/orders').as('orders')
cy.wait('@orders')
Resultado:
- Execução mais rápida
- Sincronização real com a aplicação
5. Crie comandos customizados
Centralize ações repetitivas:
Cypress.Commands.add('login', () => {
cy.visit('/login')
cy.get('#email').type('qa@teste.com')
cy.get('#senha').type('123456')
cy.get('button').click()
})
Ganho:
- Código mais limpo
- Reuso
- Manutenção simplificada
6. Use beforeEach() estrategicamente
Evite repetir setup em cada teste:
beforeEach(() => {
cy.login()
})
Mas cuidado: use com inteligência para não mascarar dependências entre testes.
7. Teste via API para preparar estado
Ao invés de criar dados via UI:
cy.request('POST', '/api/create-user', { nome: 'Teste' })
Isso:
- Reduz tempo
- Evita instabilidade visual
- Gera testes mais determinísticos
8. Paralelize execução no CI
No GitHub Actions, GitLab CI ou Azure DevOps, utilize:
cypress run --parallel --record
Redução significativa do tempo total de pipeline.
9. Use Fixtures Dinâmicas
Combine fixtures com geração de dados:
cy.fixture('user').then((user) => {
user.email = faker.internet.email()
})
Torna os testes mais realistas.
10. Evite dependência entre testes
Cada teste deve ser isolado.
Errado:
- Teste B depende do resultado do Teste A
Certo:
- Cada cenário prepara seu próprio estado
11. Use .should() ao invés de .then() quando possível
.should() faz retry automático.
cy.get('.alert').should('be.visible')
Mais confiável que:
cy.get('.alert').then(($el) => {
expect($el).to.be.visible
})
12. Configure retries globais
retries: {
runMode: 2,
openMode: 0
}
13. Separe testes por tipo
Estruture sua pasta:
e2e/
smoke/
regression/
critical/
Isso permite execução estratégica por suite.
14. Use Cypress.env() para ambientes
Cypress.env('baseUrl')
Evita hardcode e facilita deploy multiambiente.
15. Monitore tempo de execução por spec
Use o dashboard do Cypress para identificar gargalos e refatorar testes lentos.
Conclusão
Se você quer elevar o nível da sua automação de testes com Cypress, não basta escrever testes que funcionam, é preciso escrever testes:
- Rápidos
- Determinísticos
- Independentes
- Escaláveis
Esses hacks de produtividade no Cypress ajudam você a:
✅ Reduzir tempo de execução
✅ Diminuir flakiness
✅ Melhorar qualidade do pipeline
✅ Aumentar ROI da automação