15 Hacks de Produtividade no Cypress

Hacks de Produtividade Cypress

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