Rodando testes em paralelo com Appium, Selenium Grid e Java: Parte 2

Leonardo Menezes
assert(QA)
Published in
4 min readOct 5, 2018

Fala pessoal beleza ? Neste post vou dar continuidade com a configuração do selenium grid para executar os nossos testes em paralelo, vou falar um pouco de como funciona a estrutura e tentar frisar partes importantes da configuração, para que fique o mais simples possível. Bom se você não viu a primeira parte deste post eu super recomendo que veja, porque vou utilizar a estrutura que já tinha criado anteriormente. Sem mais delongas vamos começar!

O que é o selenium grid ?

Bom de forma bem resumida o selenium grid é um hub em que nos permite centralizar , paralelizar e distribuir nossos testes em nós que nele são registrados.

Como funciona ?

Workflow Selenium Grid

No desenho acima conseguimos visualizar os scripts de testes, o hub do selenium grid, os nós com servidores appium e os devices que vão rodar os nossos testes, vou explicar o papel de cada um nessa imagem.

Scripts de teste : São os nossos testes propriamente ditos, aqui ficam os comandos que devem ser executados pelos nossos testes, nessa imagem seria o client side da estrutura.

Terminal com servidores appium : Representam cada um dos nossos servidores que vamos subir com configurações diferentes para cada plataforma e local de execução. Eles ficam entre o device ou simulador e selenium hub.

Hub selenium grid : É um outro servidor que serve como um hub, para que seja possível registrar outros nós de servidores appium, nele conseguimos acessar um console com todos os nós nele conectado. O selenium grid fica como uma ponte entre os scprits de teste e os nós de appium.

Legal, agora que fizemos esse overview vamos colocar a mão na massa!

Mãos à obra!

Realizando ajustes na estrutura do projeto atual

Antes de começar tudo vamos fazer alguns ajustes na nossa estrutura atual do projeto, como demorei um pouco para continuar este post, algumas coisas precisam e precisaram ser alteradas, então vamos lá!

  • Alterar JRE System Library para JavaSE-1.8 (Somente se necessário)
Alterando JRE System Library
  • Vamos definir que esta vai ser a versão do java vamos usar para compilar o nosso projeto, vamos setar isso no arquivo pom.xml:
Definindo compilador
  • Bom depois desses ajustes vamos adicionar uma configuração no surefire, para fazermos com que nossos testes executem em paralelo com duas threads abertas e execute em paralelo pelas classes de teste.
Configuração surefire para execução de testes em paralelo
  • Vamos atualizar também a nossa lib java client
Atualização do Java Client

Quando fui executar os testes me deparei com algumas incompatibilidades em padrões que antes funcionavam e fiz algumas atualizações no código!

  • alterando o capabilities e chamadas de métodos do appium driver
Alteração do métodos de preenchimento e de esconder o teclado
Alteração dos capabilities removendo plataform name e plataform

É importante salientar que é necessário atualizar a url em que nosso cliente vai se conectar, tanto do teste de Android quanto o de Ios, conforme visualizamos mais acima, agora vamos nos conectar utilizando somente o hub!

Configurando Selenium Grid

Finalmente após estes ajustes podemos agora fazer a configuração do selenium grid!

  • Para iniciar vamos fazer o download do jar do selenium standalone que será o nosso hub. Após o download vamos colar o arquivo na raiz do nosso projeto.
  • Agora vamos criar um nó para cada sistema operacional diferente, esse nós são arquivos json, neles serão escritos as configurações que o nó deve possuir.

Lembrando que coloquei estas pequenas descrições no arquivo para resumir alguns atributos de configuração do node, não é possível comentar arquivos json!

Android Node Capabilities
IOS Node Capabilities
  • Após criar os arquivos salve-os e coloque os dois juntos em uma pasta chamada /node-configurations/ na raiz do seu projeto.

Não vou entrar muito no detalhe de todos os atributos pois o post ficaria gigante rsrs. Mas você pode dar uma olhada nesta documentação.

Inicializando HUB e registrando os nós.

  • iniciar hub $ java -jar selenium-server-standalone-3.14.0.jar -role hub (lembre-se de inserir a sua versão do jar)
  • verifique se o hub foi iniciado corretamente acessando em seu navegador o endereço http://localhost:4444/
Selenium Standalone Page

Agora vamos conectar nossos nós ao hub :

  • appium --nodeconfig ./ios-node.json -p 4455 -cp 4455
  • appium --nodeconfig ./android-node.json -p 4456 -cp 4456

Após realizado os comandos acima precisamos confirmar se tudo está conectado de forma correta, para isso vamos acessar o console da nossa página do selenium standalone http://localhost:4444/grid/console

Console Selenium Grid

Tudo certo ? Espero que sim!

Executando os testes!

  • Inicie seu emulador android e vamos rodar os testes com o maven e ver a magia acontecer!
  • Dentro do diretório raiz em que se encontra o arquivo pom.xml vamos executar o seguinte comando :

$ mvn clean test

Mágico não ?

Testes executados com sucesso e em paralelo ❤

Conclusão

Mesmo que nesse projeto de exemplo, não tenha aproveitado toda capacidade do selenium-grid podemos ver algumas vantagens em seu uso para execução de testes distribuídos! Podemos ter nós por diversos sistemas operacionais centralizados em um único hub, podemos também executar os mesmos testes distribuídos e em paralelo conforme a nossa necessidade, o que torna nossos testes muito mais escaláveis!

Referências

--

--