Testes de Aceitação com PHP
Tudo tranquilo pessoal? Bem vindos a mais um post. \o/
Nesse post eu vou dar uma pequena introdução aos testes de aceitacão ou também conhecidos como testes e2e, que basicamente, são testes que simulam o usuário utilizando uma aplicação, através da UI (User Interface).
Antes de continuar, é importante citar que esses testes devem ser utilizados com cuidado, pois esses testes são custosos e com o tempo podem surgir alguns problemas: o custo de manutenção se torna alto, os testes demoram muito para rodar (aumentando tempo de build) e dar feedback sobre o sistema, muitos testes falham devido a falsos negativos, etc.
Para evitar esses problemas, algo que devemos levar em conta é a pirâmide de automação de testes.
Mike Cohn descreve o conceito da Pirâmide de Automação de Testes (Test Automation Pyramid) em seu livro Succeeding with Agile.
No livro Cohn diz que testes automatizados devem ser compostos de 3 níveis: Unidade, Serviço (Integração) e UI (Aceitação ou e2e). Ou seja, temos uma maior quantidade de testes unitários na base da pirâmide, pois são mais rápidos de serem executados e fáceis de manter. No centro, temos uma quantidade média de testes de serviço (Integração), que testam, basicamente, os serviços da aplicação “abaixo” da UI e evitamos criar exaustivamente testes de aceitação para validar regras de negócio. No topo, temos uma pequena quantidade de testes de aceitação, para evitar os problemas que citamos anteriormente.
Ok, agora que estamos contextualizados do por que de usar testes de aceitação, e do por que usar com cuidado, podemos seguir para a pratica.
Preparando o ambiente.
Para focar nos testes eu preparei um ambiente de fácil inicialização utilizando o Docker, vamos a instalação:
- Instale o Docker.
- Instale o docker-compose.
- Instale o Git.
- Faça o download ou clone do repositório e2e-tests-php.
- Após o download terminar, acesse a pasta do projeto.
cd caminho/para/o/diretorio/e2e-tests-php
- Para subir o ambiente basta executar o seguinte comando.
docker-compose up -d
Apenas para deixar claro, as ferramentas utilizadas para realizar os testes serão:
Essas ferramentas serão instaladas automaticamente pelo Docker.
Começando a testar.
Para começar, crie o arquivo de configuração behat.yml:
Alguns parâmetros que valem ser destacados nesse arquivo são:
base_url: Esse parâmetro é responsável por dizer qual a URL base para os testes no caso de utilizar caminhos relativos nos arquivos *.feature.
Obs: nesse caso a url base está http://php/ por causa do docker, se for rodar na maquina sem utilizar o docker pode utilizar http://localhost/.
suites: Onde será especificado os casos de teste.
paths: Caminho do arquivo *.feature.
contexts: Classe dos testes que serão executados.
Crie o arquivo cad_user.feature dentro do diretório ./tests/acceptance/features/ .
Esse arquivo é responsável por descrever o cenário que será testado, descrevendo passo a passo utilizando inglês ou algum idioma suportado pelo Behat. É importante lembra que ele segue algumas convenções, como a utilização das palavras Given, When e Then (o And é opcional), para entender melhor sobre essa convenção vocês podem acessar a doc http://behat.org/en/latest/user_guide/gherkin.html.
Agora no diretório ./tests/acceptance/ crie o arquivo CadUserContext.php.
É possível ver que para cada item do cenário é criado um método que irá executar os comandos necessários para realizar o respectivo teste. Para entender os comandos e descobrir outros, acesse a doc do Mink http://mink.behat.org/en/latest/index.html
Uma coisa bacana sobre essa parte, é que criando a classe sem os métodos e rodando o comando docker-compose exec php vendor/bin/behat, os testes serão executados e ao ver que os métodos não existem eles serão gerados automaticamente, como pode ser visto na imagem a seguir.
Com os testes prontos, agora precisamos criar as paginas que serão testadas. Para não deixar esse artigo tão extenso, eu criei um repositório no GitHub com o projeto completo que eu criei para fazer esse artigo, você pode acessa-lo pelo link a seguir.
No projeto, eu criei apenas o front-end sem criar o back-end, mas o docker-composer esta configurado de uma forma que permite a criação de uma aplicação completa, lá eu também adicionei novos cenários de testes para o login.
Quando as páginas estiverem prontas, basta rodar o comando docker-compose exec php vendor/bin/behat para executar os testes novamente, e agora eles devem passar como na imagem a seguir.
Um ponto interessante, é que com esses testes, é possível testar a velocidade de carregamento das páginas. E com isso terminamos esse artigo, e espero que tenham gostado. =)
Qualquer dúvida podem entrar em contato comigo pelo Twitter @lflimeira02, no Slack do Training Center ou no Slack do PHPSP.