Atenção: O Zalenium foi descontinuado, portando fiz outra publicação como correção e complemento. Você pode acessar aqui.
Bom dia/boa tarde/ boa noite, galera! Hoje resolvi trazer uma publicação com uma pegada um pouco técnica. Vou abordar uma estratégia que pode ajudar times que precisam executar testes funcionais em diferentes dispositivos e sistemas. Para que seja possível executar o projeto modelo desta publicação, primeiro, vamos entender um pouco sobre as tecnologias que fazem parte da solução e a arquitetura proposta. Aproveitei para deixar uma configuração utilizando o Jenkins, como forma de apoio nos estudos e na execução dos testes localmente.
Testes Paralelos
São testes de diversos cenários utilizando os mesmos dados, em diferentes dispositivos simultaneamente, com o objetivo de reduzir o tempo de execução, a tornar mais escalável os testes para as aplicações e a melhorar o feedback.
Um pouco do que são as tecnologias envolvidas
Java é uma linguagem de programação orientada a objetos fortemente “tipada” e que permite desenvolver aplicações web e diversos outros dispositivos.
Maven é uma ferramenta de compilação de código que auxilia na construção, definição e desenvolvimento de aplicações usando componentes externos.
TestNG é um framework de testes robusto que pode ser criado para diversos tipos de testes.
Jenkins é uma ferramenta de automação de processos de build, testes e entrega de software em diferentes ambientes.
Docker é a ferramenta que possui grupos de plataforma como serviço (PaaS) que utilizam virtualização para entregar sistemas com pacotes, arquivos e configurações específicas, os famosos contêineres.
Zalenium é uma aplicação altamente escalável, baseada no Selenium Grid que permite executar, gravar e ter acesso em tempo real das automações/testes.
Bom, depois dessa breve e simplória introdução, vamos analisar um projeto que criei no Github. Você pode acessar o projeto clicando aqui.
Proposta da arquitetura e execução dos testes
Na imagem da arquitetura, podemos ver a utilização do Jenkins. No projeto disponibilizado no Github, adicionei um docker-compose.yml com um contêiner do Jenkins e um do Zalenium. Você pode ficar a vontade para usar o contêiner e configurar o Jenkins para rodar o job mas nessa publicação vou abordar a execução dos testes utilizando diretamente o IntelliJ ou o CMD.
Funcionamento
1 — O Jenkins faz um clone do repositório(para usar o Jenkins acesse a url http://localhost:4444);
2 — Os testes podem ser executados via Maven/TestNG/CMD(consultar o Jenkinsfile);
3 — As execuções utilizam o nó do Selenium Grid e são disponibilizadas no Zalenium como live preview.
Obs: sem a utilização do Jenkins você precisa clonar e executar o repositório localmente de forma manual.
Como ficou o docker-compose.yml com o Jenkins e o Zalenium
Cenário de teste
O cenário de teste acessa a página do Google utilizando um browser, pesquisa por uma conta do Medium, clica no resultado desejado e confirma se o perfil está correto.
É nessa classe SearchTest.Java que faço a criação do método setup() com uma string, do nó e a instância dos dispositivos Chrome e Firefox configuradas. Usei a annotation “@Parameters” do TestNG para fazer a referência a string ao gerar o arquivo testng.xml. Após isso, foi criada a tag “<parameter>” com o “name” e o “value” dos dispositivos que desejei usar.
Execução dos testes(sem o Jenkins)
Faça o clone do projeto
$ git clone https://github.com/gneder/ZaleniumGridTest.git
Suba os contêineres usando o comando na raiz do projeto:
$ docker-compose up
Execute os testes via IntelliJ
Acessar o seguinte diretório
$ cd /ZaleniumGridTest/testng.xml
Clicar com o botão direito do mouse em qualquer parte do arquivo
- Selecionar a opção 'Run '...\testng.xml'
O resultado via IntelliJ:
Execute os testes via cmd:
$ mvn clean test
O resultado via cmd:
Importante que o arquivo pom.xml esteja com os plugins e as dependencias corretas na hora da execução dos testes.
Bônus:
Verificar no grid hub os nós que estão em execução
http://localhost:4444/grid/console
Acessar as execuções em tempo real
http://localhost:4444/grid/admin/live
Dashboard
http://localhost:4444/dashboard
Esse é um assunto muito extenso e acho válido ser discutido aqui ou ver/fazer mais publicações sobre este tema. Gostaria muito de receber seu comentário ou feedback.
Muito obrigado.