Testes paralelos com TestNG, Docker e Zalenium

neder
4 min readMar 3, 2022

--

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.

Referência

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.

Proposta da arquitetura

Como ficou o docker-compose.yml com o Jenkins e o Zalenium

docker-compose

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.

Obs: sem design pattern.

É 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.

--

--

neder

Hey, I enjoy talking about Software Quality, Agile Testing and sometimes about random things.