Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Como criar e executar testes paralelos web usando Selenium e containers

822 views

Published on

Palestra ministrada na Trilha Testes do The Developers Conference São Paulo dia 19/07/2018 e fala sobre como criar testes para execução paralela e como criar uma infraestrutura para esta execução com containers

Published in: Technology

Como criar e executar testes paralelos web usando Selenium e containers

  1. 1. COMO CRIAR E EXECUTAR TESTES PARALELOS WEB USANDO SELENIUM E CONTAINERS @eliasnogueira
  2. 2. Problemas na execução de testes automatizados para web Compatibilidade dos browsers Tempo de execução dos testes
  3. 3. Solução: Grid
  4. 4. Grid Hub Nós
  5. 5. Script de Teste Envia Capacidades NÓ Windows NÓ MacOSX NÓ Linux HUB Entende a capacidade e envia para o nó correto
  6. 6. NÓ Windows NÓ MacOSX NÓ Linux
  7. 7. Local Utiliza máquinas dentro da nossa infraestrutura, podendo ser uma máquina real ou virtual. Nuvem Utiliza serviços na nuvem para criar e conectar máquinas. Containers Utilizar containers e o suporte a orquestração para a criação de grid sob demanda. Formas de criar uma grid
  8. 8. O que é Paralelismo? 1 maven-surefire-plugin Junit experimental ParallelComputer 3 TestNG suite 2 Formas de criar
  9. 9. • Depende de infraestrutura física • Dificuldade de escalar • Requer manutenção (atualizações) Problema com o grid local
  10. 10. Solução proposta Com o TestNG conseguimos inserir parâmetros da suíte de teste em xml para os scripts de teste, removendo dependência direta de browsers no script. Com Docker podemos utilizar containers como hub e como nós, e utilizar quantos containers forem necessários para as execuções de teste. TestNG
  11. 11. SCONTAINERS SELENIUM • Containers separados para hub e nós • selenium-hub • selenium-node-chrome • selenium-node-firefox • Necessidade de criar containers adicionais para melhora do paralelismo • Containers através da imagem elgalu/selenium • Auto-escala de containers baseado na quantidade de testes que será recebido • Live Preview com VNC • Gravação de Vídeos • Dashboard
  12. 12. Suite de Teste HUB 2 testes Google Chrome Execução sem auto-escala Executa os dois testes nos dois nós
  13. 13. Suite de Teste HUB 4 testes Google Chrome Esperando 2 slots free.... Execução sem auto-escala
  14. 14. Suite de Teste HUB 4 testes Google Chrome Execução sem auto-escala Executa dos testes nos dois nós disponíveis
  15. 15. Suite de Teste HUB 4 testes Google Chrome Execução com auto-escala Cria mais dois nós
  16. 16. Suite de Teste HUB Execução com auto-escala Ao final da execução, mantém somente os dois nós
  17. 17. Exemplo do paralelismo - código @BeforeMethod @Parameters("browser") public void preCondicao(@Optional("chrome") String browser) { driver = getDriver(browser); } <suite name="Build Dev" parallel="tests" thread-count="99"> <test name="Execução Chrome"> <parameter name="browser" value="chrome"/> <classes> <class name="test.ReservarQuartoTest" /> </classes> </test> </suite>
  18. 18. Exemplo do paralelismo - código @BeforeMethod @Parameters("browser") public void preCondicao(@Optional("chrome") String browser) { driver = getDriver(browser); } <suite name="Build Dev" parallel="tests" thread-count="99"> <test name="Execução Chrome"> <parameter name="browser" value="chrome"/> <classes> <class name="test.ReservarQuartoTest" /> </classes> </test> </suite> Indicando que o paralelismo é por testes na classe de teste
  19. 19. Exemplo do paralelismo - código @BeforeMethod @Parameters("browser") public void preCondicao(@Optional("chrome") String browser) { driver = getDriver(browser); } <suite name="Build Dev" parallel="tests" thread-count="99"> <test name="Execução Chrome"> <parameter name="browser" value="chrome"/> <classes> <class name="test.ReservarQuartoTest" /> </classes> </test> </suite> Verifica associação do parâmetro Insere o valor do parâmetro no teste
  20. 20. Exemplo do paralelismo - código @BeforeMethod @Parameters("browser") public void preCondicao(@Optional("chrome") String browser) { driver = getDriver(browser); } <suite name="Build Dev" parallel="methods" thread-count="99"> <test name="Execução Chrome"> <parameter name="browser" value="chrome"/> <classes> <class name="test.ReservarQuartoTest" /> </classes> </test> </suite> Se a execução não for via suíte, executa no Google Chrome
  21. 21. Exemplo do auto-escala Zalenium # Pull docker-selenium docker pull elgalu/selenium # Pull Zalenium docker pull dosel/zalenium # Run Zalenium docker run --rm -ti --name zalenium -p 4444:4444 -v /var/run/docker.sock:/var/run/docker.sock -v /tmp/videos:/home/seluser/videos --privileged dosel/zalenium start --screenWidth 1366 --screenHeight 768 --timeZone "America/Sao_Paulo” --desiredContainers 2 --maxDockerSeleniumContainers 10 --maxTestSessions 1
  22. 22. Ganhos reais min Tempo atual para executar uma suíte de pagamentos com 61 testes em uma grid de 20 nós. min Tempo com abordagem de execução local (sequencial) de 61 testes. Tempo de execução para 15 suítes com 394 testes em grid min
  23. 23. ProTip: Criar uma estratégia de execução de testes em grid • Dividir a execução em diversas suítes de teste • Criar suítes de smoke e execute-as primeiro • Entender a carga de execução (números de testes) e defina a sua infraestrutura (nós)
  24. 24. Suíte de Testes 90 testes 90 testes 30 min 90 testes 30 min 90 testes 30 min Tempo total: 30 min
  25. 25. Suíte de Testes 30 testes 30 testes 10 min 30 testes 10 min 30 testes 10 min Tempo total: 10 min Suíte de Testes 30 testes Suíte de Testes 30 testes
  26. 26. OBRIGADO! @eliasnogueira
  27. 27. Referências Paralelismo com maven-surefire-plugin https://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html Paralelismo com TestNG suite http://testng.org/doc/documentation-main.html#parallel-tests Paralelismo com JUnit experimental ParallelComputer http://techblog.constantcontact.com/software-development/parallelizing-junit-test-execution/ Docker Selenium https://github.com/SeleniumHQ/docker-selenium Zalenium https://opensource.zalando.com/zalenium/ Elgalu https://github.com/elgalu/docker-selenium

×