Cypress - testes web, open source e na moda
Cypress, Cypress… Esta framework tão falada nos dias de hoje, principalmente quando se fala em automação.
Mas afinal, que framework é esta? Para que serve? Qual a sua mais valia?
O que é?
O Cypress é uma framework para automação de testes, open-source e com foco em testes web e oferece uma experiência de teste completa e interativa, eficiente e intuitiva, tornando mais fácil a vida dos programadores e QAs.
Foi criada para facilitar a escrita e a execução de testes end-to-end (E2E), testes de integração e testes de unidade para aplicações web, simplificando e permitindo aprimorar o processo de criação, execução e manutenção de testes de UI, permitindo que os programadores e equipas de qualidade verifiquem a funcionalidade e a usabilidade das aplicações da web, de forma eficiente.
E quais são as suas principais características?
- Arquitetura “tudo-em-um” - De instalação Simples, pois não requer a instalação de drivers adicionais. O Cypress é instalado como uma dependência de desenvolvimento via npm ou yarn. 
- Com uma configuração Rápida inicial simples, permitindo que os programadores e QAs comecem a escrever testes rapidamente. 
 
- Execução no mesmo loop de evento do browser - A velocidade e precisão com que o Cypress executa os testes diretamente no browser (no mesmo loop de eventos que a aplicação) faz com que os testes sejam mais rápidos e precisos. 
- Com o acesso completo ao DOM, permite interações e inspecções detalhadas. 
 
- Depuração/Debug eficiente - Dadas as ferramentas de desenvolvimento que tem, integra-se de forma eficaz com as ferramentas de programação do browser (o famoso F12), facilitando assim a depuração de testes. 
- Ao fornecer logs detalhados dos comandos e atividades durante a execução dos testes, permite uma maior rastreabilidade e eficiência. 
 
- Feedback instantâneo - Com uma execução em tempo real, é possível acompanhar as atualizações instantâneas na interface de teste à medida que os testes são executados, permitindo uma experiência interativa. 
- O acesso a relatórios visuais, com partilha de screenshots e gravações de vídeo dos testes executados, facilita a identificação de falhas. 
 
- Testes E2E, de integração e de unidade - Dada a sua versatilidade, permite a execução de testes E2E, testes de integração e testes de unidade, tudo no mesmo ambiente. 
 
- Automação e controlo da rede - Permite interceptar e manipular requisições na rede, através da simulação das respostas de APIs, para testar diversos cenários. 
- Permite também simular diferentes condições da rede, a fim de validar a testar a robustez da aplicação. 
 
- Suporte a testes de interface - Como oferece comandos para interagir com elementos da interface (como cliques, escrita, arrastar,…) ajuda a ter uma melhor e mais fiável execução dos testes, por uma perspectiva de utilizador. 
- Como tem uma sintaxe intuitiva, para fazer asserts sobre o estado da aplicação. 
 
- Ambiente de testes isolado - Cada teste é executado em um ambiente ‘limpo’ e isolado, de forma a garantir que os testes não interferem uns com os outros. 
- Suporta a execução de testes em paralelo, o que permite reduzir de forma eficiente o tempo de execução dos mesmos e também numa fase posterior uma integração mais subtil com os processos de CI/CD. 
 
- Suporte a múltiplos browsers - Como é uma framework para testes web, é compatível com Chrome, Firefox, Edge, entre outros.. 
 
- Framework agnóstica - Ou seja, funciona bem com uma variedade de frameworks JavaScript modernos, como React, Angular, Vue, tornando-se assim uma ferramenta versátil para que utilizam diferentes stacks tecnológicos, como as equipas de desenvolvimento.. 
 
Comparação com Outras Ferramentas
Cypress vs. Selenium
- Configuração e Uso: - Cypress: Mais fácil de configurar e usar, com uma configuração simples através da instalação via npm e execução direta no browser. 
- Selenium: Requer configuração de drivers específicos para cada browser, o que pode ser mais complexo. 
 
- Execução de Testes: - Cypress: Executa testes em paralelo, permitindo ter testes mais rápidos e uma experiência de desenvolvimento mais fluida. 
- Selenium: Executa testes fora do browser, o que pode resultar em tempos de execução mais lentos e maior complexidade de debug. 
 
- Funcionalidades: - Cypress: Oferece uma interface de debug mais competa e fácil de usar, com ferramentas de programação integradas. 
- Selenium: Menos foco em debug interativo, exigindo mais configuração manual para funcionalidades avançadas. 
 
Cypress vs. Playwright
- Suporte a browsers: - Cypress: Principalmente focado no Chrome e no Edge, com suporte recente para Firefox. 
- Playwright: Suporte robusto para Chrome, Firefox e Safari, oferecendo uma maior flexibilidade para testes em múltiplos browsers. 
 
- Execução e Depuração: - Cypress: oferece uma interface de utilizador bastante intuitiva e completa para a execução e debug de testes. 
- Playwright: Embora tenha uma interface em linha de comandos e uma ferramentas de depuração, é mais focado no suporte abrangente a múltiplos browsers e testes paralelos. 
 
- Facilidade de Uso: - Cypress: APIs intuitivas e documentação abrangente tornam-no muito acessível para programadores e QAs. 
- Playwright: Também é considerado fácil de usar, mas pode exigir uma configuração inicial mais complexa, dependendo da sua aplicação. 
 
Onde usar?
- Testes de Funcionalidade: - Verificação de que todos os recursos e funcionalidades de uma aplicação web estão a funcionar conforme o esperado. 
 
- Testes de Navegação: - Garantir que os links, botões e redirecionamentos do site funcionam corretamente e que os utilizadores navegam pelo site de forma eficaz. 
 
- Testes de Preenchimento de Formulários: - Verificar se os formulários web podem ser preenchidos corretamente, enviar dados e lidar com validações. 
 
- Testes de Responsividade: - Avaliar como a aplicação se comporta em diferentes tamanhos de ecrã e dispositivos, garantindo que a interface é user-friendly em dispositivos móveis, tablets e computadores. 
 
- Testes de Integração: - Testar a integração entre componentes ou serviços da aplicação, para garantir que cooperam e comunicam adequadamente. 
 
- Testes de Usabilidade: - Avaliar a usabilidade da interface do utilizador, verificando se as suas ações podem ser realizadas de maneira intuitiva e sem problemas. 
 

