Como criar e executar testes paralelos web usando Selenium e containers

Elias Nogueira
Elias NogueiraLead Software Engineer at Waes
COMO CRIAR E EXECUTAR TESTES
PARALELOS WEB USANDO
SELENIUM E CONTAINERS
@eliasnogueira
Problemas na execução de testes
automatizados para web
Compatibilidade
dos browsers
Tempo de execução
dos testes
Solução: Grid
Grid
Hub
Nós
Script de Teste
Envia Capacidades
NÓ Windows NÓ MacOSX NÓ Linux
HUB
Entende a capacidade
e envia para o nó correto
NÓ Windows NÓ MacOSX NÓ Linux
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
O que é
Paralelismo?
1
maven-surefire-plugin
Junit
experimental
ParallelComputer
3
TestNG suite
2
Formas de criar
• Depende de infraestrutura física
• Dificuldade de escalar
• Requer manutenção (atualizações)
Problema com o grid local
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
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
Suite de Teste
HUB
2 testes
Google Chrome
Execução sem auto-escala
Executa os dois testes
nos dois nós
Suite de Teste
HUB
4 testes
Google Chrome
Esperando 2 slots free....
Execução sem auto-escala
Suite de Teste
HUB
4 testes
Google Chrome
Execução sem auto-escala
Executa dos testes nos
dois nós disponíveis
Suite de Teste
HUB
4 testes
Google Chrome
Execução com auto-escala
Cria mais dois nós
Suite de Teste
HUB
Execução com auto-escala
Ao final da execução,
mantém somente os dois nós
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>
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
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
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
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
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
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)
Suíte de Testes
90 testes
90 testes
30 min
90 testes
30 min
90 testes
30 min
Tempo total: 30 min
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
OBRIGADO!
@eliasnogueira
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
1 of 27

Recommended

Cross browser testing with browser stack by
Cross browser testing with browser stackCross browser testing with browser stack
Cross browser testing with browser stackDenys Poloka
1.3K views17 slides
Browser_Stack_Intro by
Browser_Stack_IntroBrowser_Stack_Intro
Browser_Stack_IntroMithilesh Singh
570 views39 slides
Agile testing by
Agile testing Agile testing
Agile testing Rodrigo Oliveira, Msc, PMP
705 views89 slides
Automação de Teste para iOS e Android com Appium by
Automação de Teste para iOS e Android com AppiumAutomação de Teste para iOS e Android com Appium
Automação de Teste para iOS e Android com AppiumElias Nogueira
3.9K views16 slides
Criando uma grid para execução de testes paralelo com Appium by
Criando uma grid para execução de testes paralelo com AppiumCriando uma grid para execução de testes paralelo com Appium
Criando uma grid para execução de testes paralelo com AppiumElias Nogueira
1.4K views29 slides
Usando containers com auto-escala de testes by
Usando containers com auto-escala de testesUsando containers com auto-escala de testes
Usando containers com auto-escala de testesElias Nogueira
1.1K views22 slides

More Related Content

What's hot

Automação e virtualização de serviços by
Automação e virtualização de serviçosAutomação e virtualização de serviços
Automação e virtualização de serviçosElias Nogueira
2.2K views53 slides
Selenium by
SeleniumSelenium
SeleniumRakshitha Raviprakash
1.9K views40 slides
Introduction to Selenium Web Driver by
Introduction to Selenium Web DriverIntroduction to Selenium Web Driver
Introduction to Selenium Web DriverReturn on Intelligence
48.8K views30 slides
Webdriver io presentation by
Webdriver io presentationWebdriver io presentation
Webdriver io presentationJoão Nabais
1.8K views14 slides
API Testing Using REST Assured with TestNG by
API Testing Using REST Assured with TestNGAPI Testing Using REST Assured with TestNG
API Testing Using REST Assured with TestNGSiddharth Sharma
1K views31 slides
Browser Automation with Playwright – for integration, RPA, UI testing and mor... by
Browser Automation with Playwright – for integration, RPA, UI testing and mor...Browser Automation with Playwright – for integration, RPA, UI testing and mor...
Browser Automation with Playwright – for integration, RPA, UI testing and mor...Lucas Jellema
1.4K views53 slides

What's hot(20)

Automação e virtualização de serviços by Elias Nogueira
Automação e virtualização de serviçosAutomação e virtualização de serviços
Automação e virtualização de serviços
Elias Nogueira2.2K views
Webdriver io presentation by João Nabais
Webdriver io presentationWebdriver io presentation
Webdriver io presentation
João Nabais1.8K views
API Testing Using REST Assured with TestNG by Siddharth Sharma
API Testing Using REST Assured with TestNGAPI Testing Using REST Assured with TestNG
API Testing Using REST Assured with TestNG
Siddharth Sharma1K views
Browser Automation with Playwright – for integration, RPA, UI testing and mor... by Lucas Jellema
Browser Automation with Playwright – for integration, RPA, UI testing and mor...Browser Automation with Playwright – for integration, RPA, UI testing and mor...
Browser Automation with Playwright – for integration, RPA, UI testing and mor...
Lucas Jellema1.4K views
Mocking in Java with Mockito by Richard Paul
Mocking in Java with MockitoMocking in Java with Mockito
Mocking in Java with Mockito
Richard Paul14.3K views
O que Evitar na Escrita de Criterios de Aceite by Elias Nogueira
O que Evitar na Escrita de Criterios de AceiteO que Evitar na Escrita de Criterios de Aceite
O que Evitar na Escrita de Criterios de Aceite
Elias Nogueira8.4K views
A guide to getting started with WebdriverIO by Nilenth Selvaraja
A guide to getting started with WebdriverIOA guide to getting started with WebdriverIO
A guide to getting started with WebdriverIO
Nilenth Selvaraja392 views
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가" by 용근 권
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
KSUG 스프링캠프 2019 발표자료 - "무엇을 테스트할 것인가, 어떻게 테스트할 것인가"
용근 권4.6K views
Cross-Browser-Testing with Protractor & Browserstack by Leo Lindhorst
Cross-Browser-Testing with Protractor & BrowserstackCross-Browser-Testing with Protractor & Browserstack
Cross-Browser-Testing with Protractor & Browserstack
Leo Lindhorst285 views
BDD não é automação de teste - Scrum Gathering by Elias Nogueira
BDD não é automação de teste - Scrum GatheringBDD não é automação de teste - Scrum Gathering
BDD não é automação de teste - Scrum Gathering
Elias Nogueira4.1K views
Test Automation Frameworks: Assumptions, Concepts & Tools by Amit Rawat
Test Automation Frameworks: Assumptions, Concepts & ToolsTest Automation Frameworks: Assumptions, Concepts & Tools
Test Automation Frameworks: Assumptions, Concepts & Tools
Amit Rawat2K views
Testing RESTful Webservices using the REST-assured framework by Micha Kops
Testing RESTful Webservices using the REST-assured frameworkTesting RESTful Webservices using the REST-assured framework
Testing RESTful Webservices using the REST-assured framework
Micha Kops45.8K views
API Testing following the Test Pyramid by Elias Nogueira
API Testing following the Test PyramidAPI Testing following the Test Pyramid
API Testing following the Test Pyramid
Elias Nogueira1.7K views
Test and Behaviour Driven Development (TDD/BDD) by Lars Thorup
Test and Behaviour Driven Development (TDD/BDD)Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)
Lars Thorup16K views
Playwright: A New Test Automation Framework for the Modern Web by Applitools
Playwright: A New Test Automation Framework for the Modern WebPlaywright: A New Test Automation Framework for the Modern Web
Playwright: A New Test Automation Framework for the Modern Web
Applitools10.5K views
안드로이드 윈도우 마스터 되기 by Myungwook Ahn
안드로이드 윈도우 마스터 되기안드로이드 윈도우 마스터 되기
안드로이드 윈도우 마스터 되기
Myungwook Ahn5K views

Similar to Como criar e executar testes paralelos web usando Selenium e containers

Paralelize seus testes web e mobile para ter feedbacks mais rápidos by
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosElias Nogueira
704 views49 slides
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor by
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
9K views59 slides
Testando aplicações DataSnap by
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnapAndreano Lanusse
6.5K views15 slides
Testes Automatizados e testes de carga no Visual Studio Team Service by
Testes Automatizados e testes de carga no Visual Studio Team ServiceTestes Automatizados e testes de carga no Visual Studio Team Service
Testes Automatizados e testes de carga no Visual Studio Team ServiceAlessandra Soares
93 views10 slides
Testes em aplicações JEE: Montando sua infra de testes automatizados by
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosDiego Santos
1.8K views44 slides
Entity framework migrations by
Entity framework migrationsEntity framework migrations
Entity framework migrationsPriscila Mayumi
682 views16 slides

Similar to Como criar e executar testes paralelos web usando Selenium e containers(20)

Paralelize seus testes web e mobile para ter feedbacks mais rápidos by Elias Nogueira
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Elias Nogueira704 views
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor by Allyson Barros
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Allyson Barros9K views
Testes Automatizados e testes de carga no Visual Studio Team Service by Alessandra Soares
Testes Automatizados e testes de carga no Visual Studio Team ServiceTestes Automatizados e testes de carga no Visual Studio Team Service
Testes Automatizados e testes de carga no Visual Studio Team Service
Testes em aplicações JEE: Montando sua infra de testes automatizados by Diego Santos
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizados
Diego Santos1.8K views
Solucionando a Teoria do Caos com Cypress.io by Patrick Monteiro
Solucionando a Teoria do Caos com Cypress.ioSolucionando a Teoria do Caos com Cypress.io
Solucionando a Teoria do Caos com Cypress.io
Patrick Monteiro177 views
TDC - Testes e Sistemas legados #quemNunca - SC/2016 by Fernando Santiago
TDC - Testes e Sistemas legados #quemNunca - SC/2016TDC - Testes e Sistemas legados #quemNunca - SC/2016
TDC - Testes e Sistemas legados #quemNunca - SC/2016
Fernando Santiago1.2K views
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta by tdc-globalcode
Testando sua aplicação asp.net mvc de forma automatizada de ponta a pontaTestando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
Testando sua aplicação asp.net mvc de forma automatizada de ponta a ponta
tdc-globalcode607 views
CNQS - Testes Automatizados & Continuous Delivery by Samanta Cicilia
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous Delivery
Samanta Cicilia1.4K views
PDC - Testes - Usando o Testlink by slides_teltools
PDC - Testes - Usando o TestlinkPDC - Testes - Usando o Testlink
PDC - Testes - Usando o Testlink
slides_teltools8.7K views
Integração Contínua com CruiseControl e phpUnderControl by Diego Tremper
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
Diego Tremper452 views
Integração Contínua com CruiseControl e phpUnderControl by Manuel Lemos
Integração Contínua com CruiseControl e phpUnderControlIntegração Contínua com CruiseControl e phpUnderControl
Integração Contínua com CruiseControl e phpUnderControl
Manuel Lemos200 views
Integracao Contínua com CruiseControl e phpUnderControl by Diego Tremper
Integracao Contínua com CruiseControl e phpUnderControlIntegracao Contínua com CruiseControl e phpUnderControl
Integracao Contínua com CruiseControl e phpUnderControl
Diego Tremper1.2K views
Ideais Cowabunga - Headless Testing com GhostDriver by Stefan Teixeira
Ideais Cowabunga - Headless Testing com GhostDriverIdeais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriver
Stefan Teixeira1K views
Android: testes automatizados e TDD by Dextra
Android: testes automatizados e TDDAndroid: testes automatizados e TDD
Android: testes automatizados e TDD
Dextra2.7K views
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr... by Daniel Makiyama
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Daniel Makiyama3.6K views

More from Elias Nogueira

De a máxima cobertura nos seus testes de API by
De a máxima cobertura nos seus testes de APIDe a máxima cobertura nos seus testes de API
De a máxima cobertura nos seus testes de APIElias Nogueira
3.2K views37 slides
Coach por Imersão - Buscando a excelência técnica com o time by
Coach por Imersão - Buscando a excelência técnica com o timeCoach por Imersão - Buscando a excelência técnica com o time
Coach por Imersão - Buscando a excelência técnica com o timeElias Nogueira
881 views22 slides
O Agile Coach pode (e muitas vezes deve) ser técnico by
O Agile Coach pode (e muitas vezes deve) ser técnicoO Agile Coach pode (e muitas vezes deve) ser técnico
O Agile Coach pode (e muitas vezes deve) ser técnicoElias Nogueira
714 views19 slides
Create an architecture for web test automation by
Create an architecture for web test automationCreate an architecture for web test automation
Create an architecture for web test automationElias Nogueira
1.2K views26 slides
Como 4 Agile Coaches trabalham em uma Transformação Ágil by
Como 4 Agile Coaches trabalham em uma Transformação Ágil Como 4 Agile Coaches trabalham em uma Transformação Ágil
Como 4 Agile Coaches trabalham em uma Transformação Ágil Elias Nogueira
810 views26 slides
Papel do QA na Transformação Ágil by
Papel do QA na Transformação ÁgilPapel do QA na Transformação Ágil
Papel do QA na Transformação ÁgilElias Nogueira
1.2K views23 slides

More from Elias Nogueira(20)

De a máxima cobertura nos seus testes de API by Elias Nogueira
De a máxima cobertura nos seus testes de APIDe a máxima cobertura nos seus testes de API
De a máxima cobertura nos seus testes de API
Elias Nogueira3.2K views
Coach por Imersão - Buscando a excelência técnica com o time by Elias Nogueira
Coach por Imersão - Buscando a excelência técnica com o timeCoach por Imersão - Buscando a excelência técnica com o time
Coach por Imersão - Buscando a excelência técnica com o time
Elias Nogueira881 views
O Agile Coach pode (e muitas vezes deve) ser técnico by Elias Nogueira
O Agile Coach pode (e muitas vezes deve) ser técnicoO Agile Coach pode (e muitas vezes deve) ser técnico
O Agile Coach pode (e muitas vezes deve) ser técnico
Elias Nogueira714 views
Create an architecture for web test automation by Elias Nogueira
Create an architecture for web test automationCreate an architecture for web test automation
Create an architecture for web test automation
Elias Nogueira1.2K views
Como 4 Agile Coaches trabalham em uma Transformação Ágil by Elias Nogueira
Como 4 Agile Coaches trabalham em uma Transformação Ágil Como 4 Agile Coaches trabalham em uma Transformação Ágil
Como 4 Agile Coaches trabalham em uma Transformação Ágil
Elias Nogueira810 views
Papel do QA na Transformação Ágil by Elias Nogueira
Papel do QA na Transformação ÁgilPapel do QA na Transformação Ágil
Papel do QA na Transformação Ágil
Elias Nogueira1.2K views
Improve Yourself -- Learn the Skills, Join the Community - Tests by Elias Nogueira
Improve Yourself -- Learn the Skills, Join the Community - TestsImprove Yourself -- Learn the Skills, Join the Community - Tests
Improve Yourself -- Learn the Skills, Join the Community - Tests
Elias Nogueira376 views
Confie no seu pipeline: Teste automaticamente um aplicativo Java de ponta a p... by Elias Nogueira
Confie no seu pipeline: Teste automaticamente um aplicativo Java de ponta a p...Confie no seu pipeline: Teste automaticamente um aplicativo Java de ponta a p...
Confie no seu pipeline: Teste automaticamente um aplicativo Java de ponta a p...
Elias Nogueira1.2K views
BDD não é Automação de Testes by Elias Nogueira
BDD não é Automação de TestesBDD não é Automação de Testes
BDD não é Automação de Testes
Elias Nogueira5.3K views
Como ter sucesso ministrando uma palestra técnica by Elias Nogueira
Como ter sucesso ministrando uma palestra técnicaComo ter sucesso ministrando uma palestra técnica
Como ter sucesso ministrando uma palestra técnica
Elias Nogueira594 views
Quais são os steps de que deve conter na sua pipeline? by Elias Nogueira
Quais são os steps de que deve conter na sua pipeline?Quais são os steps de que deve conter na sua pipeline?
Quais são os steps de que deve conter na sua pipeline?
Elias Nogueira391 views
Testes em todos os niveis de planejamento by Elias Nogueira
Testes em todos os niveis de planejamentoTestes em todos os niveis de planejamento
Testes em todos os niveis de planejamento
Elias Nogueira644 views
Java Test Automation for REST, Web and Mobile by Elias Nogueira
Java Test Automation for REST, Web and MobileJava Test Automation for REST, Web and Mobile
Java Test Automation for REST, Web and Mobile
Elias Nogueira1.6K views
Trust Your Pipeline - Automatically Testing and End-to-End Java Application by Elias Nogueira
Trust Your Pipeline - Automatically Testing and End-to-End Java ApplicationTrust Your Pipeline - Automatically Testing and End-to-End Java Application
Trust Your Pipeline - Automatically Testing and End-to-End Java Application
Elias Nogueira972 views
Criando uma grid para execução de teste automatizado funcional e e2e by Elias Nogueira
Criando uma grid para execução de teste automatizado funcional e e2eCriando uma grid para execução de teste automatizado funcional e e2e
Criando uma grid para execução de teste automatizado funcional e e2e
Elias Nogueira815 views
A importancia de testes em todos os aspectos by Elias Nogueira
A importancia de testes em todos os aspectosA importancia de testes em todos os aspectos
A importancia de testes em todos os aspectos
Elias Nogueira360 views

Como criar e executar testes paralelos web usando Selenium e containers

  • 1. COMO CRIAR E EXECUTAR TESTES PARALELOS WEB USANDO SELENIUM E CONTAINERS @eliasnogueira
  • 2. Problemas na execução de testes automatizados para web Compatibilidade dos browsers Tempo de execução dos testes
  • 5. Script de Teste Envia Capacidades NÓ Windows NÓ MacOSX NÓ Linux HUB Entende a capacidade e envia para o nó correto
  • 6. NÓ Windows NÓ MacOSX NÓ Linux
  • 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
  • 9. • Depende de infraestrutura física • Dificuldade de escalar • Requer manutenção (atualizações) Problema com o grid local
  • 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. 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. Suite de Teste HUB 2 testes Google Chrome Execução sem auto-escala Executa os dois testes nos dois nós
  • 13. Suite de Teste HUB 4 testes Google Chrome Esperando 2 slots free.... Execução sem auto-escala
  • 14. Suite de Teste HUB 4 testes Google Chrome Execução sem auto-escala Executa dos testes nos dois nós disponíveis
  • 15. Suite de Teste HUB 4 testes Google Chrome Execução com auto-escala Cria mais dois nós
  • 16. Suite de Teste HUB Execução com auto-escala Ao final da execução, mantém somente os dois nós
  • 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. 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. 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. 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. 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. 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. 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. Suíte de Testes 90 testes 90 testes 30 min 90 testes 30 min 90 testes 30 min Tempo total: 30 min
  • 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
  • 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