Aprenda como escrever testes legíveis, estáveis e de fácil manutenção com o framework Protractor
Nesta aula iremos abordar questões relacionadas a simplicidade, organização, legibilidade, reutilização, manutenção e evolução de software, para o desenvolvimento de uma arquitetura de testes automatizados sustentável.
Recomendação de leitura;
Arquitetura Limpa: o Guia do Artesão Para Estrutura e Design de Software, de Robert C. Martin
Nesta aula iremos:
- Clonar um projeto git a partir do GitHub
- Inicializar um projeto Node.js
- Criar e editar o arquivo .gitignore
- Instalar o Protractor e outras dependências de desenvolvimento
- Estruturar os diretórios do projeto de testes end-to-end
- Navegar pela documentação oficial do Protractor (http://protractortest.org)
URL do projeto no GitHub: https://github.com/wlsf82/curso-protractor-tat.
Nesta aula iremos criar o arquivo que gera a configuração padrão para a execução de testes automatizados com o framework Protractor, além de criar arquivos com configurações específicas para a execução dos testes em diferentes navegadores.
URL da aplicação que será testada: https://lit-chamber-61567.herokuapp.com
Nesta aula iremos criar scripts para a execução de análise estática de código (utilizando a biblioteca standardjs) e testes automatizados.
Nesta aula iremos criar o primeiro teste, passando pelo primeiro Page Object e o primeiro componente. Além disso, também será abordada a tipagem dos métodos do protractor-helper.
Documentação oficial do protractor-helper
Conteúdo relacionado: lançamento do protractor-helper versão 4.1.1
Nesta aula iremos criar um novo teste com seu respectivo Page Object e componente, além de criarmos uma função utilitária por questões de reutilização de código.
Nesta aula iremos criar um novo teste com seu respectivo Page Object e componente, e iremos reaproveitar a função utilitária criada na aula anterior.
Nesta aula iremos criar um novo teste, no qual seu Page Object é composto por múltiplos componentes.
Nesta aula iremos evoluir a suite de testes criada na aula anterior para testar validações de um formulário.
Um novo conceito abordado nesta aula será a definição de um método para interação em um componente.
Nesta aula iremos evoluir ainda mais a suite de testes da aula passada para testar a submissão de um formulário com sucesso, onde além de testar que os dados foram persistidos corretamente, testaremos o redirecionamento para a página correta.
Durante a aula o aluno será apresentado à biblioteca faker, utilizada para a geração de dados aleatórios para fins de testes.
Por fim, nesta aula iremos reutilizar o método de submissão do formulário, do componente form,criado na aula anterior.
Nesta aula iremos testar o header de uma página aleatória da aplicação para fins de otimizar o tempo de execução dos testes.
Além disso, também iremos criar uma nova função utilitária.
Nesta aula iremos explorar a funcionalidade do editor de código Visual Studio Code para a execução dos scripts definidos no arquivo package.json.
Nesta aula iremos simular falhas em testes automatizados para analisar as mensagens de error fornecidas pela biblioteca protractor-helper.
Link relacionado: https://github.com/wlsf82/protractor-helper#example-of-a-test-failure-when-using-such-methods-as-expectations.
Nesta aula iremos colocar os scripts de análise estática de código e testes automatizados para rodar na integração contínua do GitHub (GitHub Actions).
Links da imagens mencionadas na aula:
- Imagem do Ubuntu 16.04.6 LTS no repositório do GitHub Actions
- Imagem do Ubuntu 18.04.4 LTS no repositório do GitHub Actions
Nesta aula faremos alguns ajustes finais no arquivo package.json, além de criar uma documentação para o projeto de testes end-to-end, cobrindo questões como pré-requisitos, instalação das dependências, e execução dos testes propriamente ditos.
Nesta aula iremos revisar o projeto analisando sua estrutura de diretórios e arquivos e suas relações com uma arquitetura limpa. Além disso, iremos analisar algumas evoluções que podem ser feitas em um projeto com tal arquitetura.
Branch do projeto no GitHub com a solução final implementada durante o curso.
Branch do projeto no GitHub com uma evolução da solução final (nesta evolução, não demonstrada durante o curso, foi implementado um Page Object base, o qual implementa o método visit, além da instância do componente header. Os outros Page Objects são então estendidos a partir do Page Object base para a remoção de duplicação de código). Para mais detalhes, leia os seguintes commits (19792d2, 36ae57e, e 6a30a77).