SlideShare une entreprise Scribd logo
1  sur  49
Télécharger pour lire hors ligne
PARALELIZE SEUS TESTES WEB E
MOBILE PARA TER
FEEDBACKS MAIS RÁPIDOS
@eliasnogueira
Problemas na execução de testes
automatizados para web
Tempo de execução
dos testes
Compatibilidade dos
browsers/dispositivos
Solução: Grid
W
E
B
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 web
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 web 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
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
Suite de Teste
HUB
4 testes
Google Chrome
Execução com auto-escala
Suite de Teste
HUB
4 testes
Google Chrome
Execução com auto-escala
Suite de Teste
HUB
Execução com auto-escala
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 com 61 testes em uma grid
de 20 nós.
min
Tempo com abordagem de
execução local (sequencial)
de uma suíte com 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
M
O
B
I
L
E
Desafios: Foco no tipo de apps
HTML/Browser Híbrido Nativo
Desafios: Fragmentação Android
Versão Codename AP
I
Distribuição
2.3.3 – 2.3.7 Gingerbread 10 0.6%
4.0.3 – 4.0.4 Ice cream Sanduich 15 0.6%
4.1.x
Jelly Bean
16
4.2.x 17
4.3 18
4.4 KitKat 19
5.0
Lollipop
21
5.1 22
6.0 Marshmallow 23
7.0
Nougat
24
7.1 25
Gingerbread
0%
Ice Cream
1% Jelly Bean
7%
KitKat
15%
Lollipop
29%
Marshmallow
32%
Nougat
16%
Desafios: Fragmentação iOS
Anteriores
2%
iOS 9
9%
iOS 10
89%
Desafios: Fragmentação dispositivos
16 iOS
24,093 Android
Desafios: Tamanho de tela
Desafios: Foco na execução
vs vs
Cloud vs Device vs Emulator
Desafios: Muitas frentes para testar
https://www.ministryoftesting.com/2012/06/getting-started-with-mobile-testing-a-mindmap/
Problema
Execução automatizada de teste é feita ”um a um”
Não há uma rápida resposta à cobertura de restrições
Fabricante
Tamanho de tela
Versão de plataforma
Script de Teste
Nó 01 Nó 02
HUB
O que eu preciso
• Selenium Server [1]
• Instalação do Appium via npm [2]
• Dispositivos emulados ou reais
• Script de Teste com:
• Suporte a execução paralela (TestNG)
• Arquitetura de teste que suporte a execução paralela
• Criação do driver (execução no dispositivo sob demanda)
[1] http://www.seleniumhq.org/download/#mainContent
[2] https://www.npmjs.com/package/appium
Passos para iniciar a grid
• Iniciar Selenium Grid como role hub
• Iniciar os nós (dispositivos)
• Apontando para a URL e porta da GRID
• Com portas do Appium (-p) e Bootstrap (-bp) diferentes dos demais
• Informando o udid do dispositivo
Script de Teste
TestNG
Selenium GRID
http://192.168.1.31:4444
Nó 01
http://192.168.1.34:4723
Nó 02
http://192.168.1.35:4724
registra na grid ->
<- executa teste
arquivo .json arquivo .json
registra na grid ->
<- executa teste
Informar alvos (nomes dispositivos)
para execução
Iniciando a grid
$ java -jar selenium-server-standalone-3.9.1.jar -role hub -hubConfig grid.json
{
"port": 4444,
"newSessionWaitTimeout": -1,
"servlets" : [],
"withoutServlets": [],
"custom": {},
"capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
"throwOnCapabilityNotPresent": true,
"cleanUpCycle": 2000,
"role": "hub",
"debug": false,
"browserTimeout": 0,
"timeout": 1800
}
grid.json
Iniciando a grid
$ java -jar selenium-server-standalone-3.9.1.jar -role hub -hubConfig grid.json
{
"port": 4444,
"newSessionWaitTimeout": -1,
"servlets" : [],
"withoutServlets": [],
"custom": {},
// demais configurações ignoradas
grid.json
Iniciando os nós
$ appium --nodeconfig json/android-6.json -p 4723 -bp 5523 -U emulator-5554
{
"capabilities":
[
{
"browserName":"Android Marshmallow",
"version":"6.0",
"platform":"ANDROID",
"maxInstances": 1
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":20000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url": "http://127.0.0.1:4723/wd/hub",
"host": "127.0.0.1",
"port": 4723,
"maxSession": 1,
"register": true,
"registerCycle": 1000,
"hubPort": 4444,
"hubHost": "192.168.0.102",
"session-override": true
}
}
android-6.json
Iniciando os nós
$ appium --nodeconfig json/android-6.json -p 4723 -bp 5523 -U emulator-5554
android-6.json
{
"capabilities":
[
{
"browserName":"Android Marshmallow",
"version":"6.0",
"platform":"ANDROID",
"maxInstances": 1
}
],
Iniciando os nós
$ appium --nodeconfig json/android-6.json -p 4723 -bp 5523 -U emulator-5554
android-6.json
{
"configuration":
{
"cleanUpCycle":2000,
"timeout":20000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url": "http://127.0.0.1:4723/wd/hub",
"host": "127.0.0.1",
"port": 4723,
Iniciando os nós
$ appium --nodeconfig json/android-6.json -p 4723 -bp 5523 -U emulator-5554
android-6.json
"host": "127.0.0.1",
"port": 4723,
"maxSession": 1,
"register": true,
"registerCycle": 1000,
"hubPort": 4444,
"hubHost": "192.168.0.102",
"session-override": true
}
}
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

Contenu connexe

Tendances

Papel do QA na Transformação Ágil
Papel do QA na Transformação ÁgilPapel do QA na Transformação Ágil
Papel do QA na Transformação ÁgilElias Nogueira
 
Automação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanAutomação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanLucas Amaral
 
TDC2018SP | Trilha Testes - Testes de carga e performance com Gatling.io
TDC2018SP | Trilha Testes - Testes de carga e performance com Gatling.ioTDC2018SP | Trilha Testes - Testes de carga e performance com Gatling.io
TDC2018SP | Trilha Testes - Testes de carga e performance com Gatling.iotdc-globalcode
 
Arquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto JavaArquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto JavaElias Nogueira
 
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOpsTDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOpstdc-globalcode
 
Criando uma grid para execução de teste automatizado funcional e e2e
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 e2eElias Nogueira
 
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)Mayara Fernandes
 
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & HudsonSuporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & HudsonRicardo Ferreira
 
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)Júlio de Lima
 
Qa ops mtc 2020 - mayara fernandes
Qa ops   mtc 2020 - mayara fernandesQa ops   mtc 2020 - mayara fernandes
Qa ops mtc 2020 - mayara fernandesMayara Fernandes
 
k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes
k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetesk6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes
k6: Performance Engineering, Monitoramento e Teste de um HPA no KubernetesKelvin Silva
 
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horasSamanta Cicilia
 
Entrega contínua com arquitetura distribuida
Entrega contínua com arquitetura distribuidaEntrega contínua com arquitetura distribuida
Entrega contínua com arquitetura distribuidaLeonardo Kobus
 
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiTDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiMayara Fernandes
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e HudsonRodrigo Branas
 
[DevelopersBR-2018] Testes de performance usando a nuvem
[DevelopersBR-2018] Testes de performance usando a nuvem[DevelopersBR-2018] Testes de performance usando a nuvem
[DevelopersBR-2018] Testes de performance usando a nuvemJúlio de Lima
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesEder Magalhães
 

Tendances (20)

Papel do QA na Transformação Ágil
Papel do QA na Transformação ÁgilPapel do QA na Transformação Ágil
Papel do QA na Transformação Ágil
 
Automação de testes de API utilizando Postman
Automação de testes de API utilizando PostmanAutomação de testes de API utilizando Postman
Automação de testes de API utilizando Postman
 
TDC2018SP | Trilha Testes - Testes de carga e performance com Gatling.io
TDC2018SP | Trilha Testes - Testes de carga e performance com Gatling.ioTDC2018SP | Trilha Testes - Testes de carga e performance com Gatling.io
TDC2018SP | Trilha Testes - Testes de carga e performance com Gatling.io
 
Arquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto JavaArquitetura básica de testes para seu projeto Java
Arquitetura básica de testes para seu projeto Java
 
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOpsTDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
TDC2018SP | Trilha Testes - Guia de sobrevivência do QA em DevOps
 
Criando uma grid para execução de teste automatizado funcional e e2e
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
 
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
QAOps - O QA com pézinho em DevOps (Ministry of Testing Floripa 2019)
 
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & HudsonSuporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
Suporte a Open Source no Oracle WebLogic 12c - Integração com Maven & Hudson
 
QAOps - Agile Trends 2021
QAOps - Agile Trends 2021QAOps - Agile Trends 2021
QAOps - Agile Trends 2021
 
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
[TDC2016] Ruby in Tests: Automatizando testes de Unidade, API e GUI (Web)
 
Qa ops mtc 2020 - mayara fernandes
Qa ops   mtc 2020 - mayara fernandesQa ops   mtc 2020 - mayara fernandes
Qa ops mtc 2020 - mayara fernandes
 
k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes
k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetesk6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes
k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas[Agile Brazil] Entrega Contínua na Infoglobo:  gerando valor em 2 horas
[Agile Brazil] Entrega Contínua na Infoglobo: gerando valor em 2 horas
 
Entrega contínua com arquitetura distribuida
Entrega contínua com arquitetura distribuidaEntrega contínua com arquitetura distribuida
Entrega contínua com arquitetura distribuida
 
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiTDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e Hudson
 
[DevelopersBR-2018] Testes de performance usando a nuvem
[DevelopersBR-2018] Testes de performance usando a nuvem[DevelopersBR-2018] Testes de performance usando a nuvem
[DevelopersBR-2018] Testes de performance usando a nuvem
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
 
Maven introdução Muito Rápida
Maven introdução Muito RápidaMaven introdução Muito Rápida
Maven introdução Muito Rápida
 

Similaire à Paralelize seus testes web e mobile para ter feedbacks mais rápidos

CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliverySamanta Cicilia
 
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...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Daniel Makiyama
 
Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnapAndreano Lanusse
 
Testando 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 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 pontatdc-globalcode
 
Automação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e MobileAutomação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e MobileElias Nogueira
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
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
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilElias Nogueira
 
Curso Básico de Selenium
Curso Básico de SeleniumCurso Básico de Selenium
Curso Básico de SeleniumAutotic
 
Android DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoAndroid DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoiMasters
 
Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end seleniumQualister
 
Ideais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriverIdeais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriverStefan Teixeira
 
[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com Codeception[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com CodeceptionQualister
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAmazon Web Services LATAM
 
[GUTS-RS] Workshop (prático) de Testes Automatizados para dispositivos móveis...
[GUTS-RS] Workshop (prático) de Testes Automatizados para dispositivos móveis...[GUTS-RS] Workshop (prático) de Testes Automatizados para dispositivos móveis...
[GUTS-RS] Workshop (prático) de Testes Automatizados para dispositivos móveis...GUTS-RS
 
Solucionando a Teoria do Caos com Cypress.io
Solucionando a Teoria do Caos com Cypress.ioSolucionando a Teoria do Caos com Cypress.io
Solucionando a Teoria do Caos com Cypress.ioPatrick Monteiro
 
Integração continua sem traumas
Integração continua sem traumasIntegração continua sem traumas
Integração continua sem traumassabrinajn
 
Oficina Python e Google App Engine
Oficina Python e Google App EngineOficina Python e Google App Engine
Oficina Python e Google App EngineRodrigo Amaral
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...Bruno Tanoue
 

Similaire à Paralelize seus testes web e mobile para ter feedbacks mais rápidos (20)

CNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous DeliveryCNQS - Testes Automatizados & Continuous Delivery
CNQS - Testes Automatizados & Continuous Delivery
 
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...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 
Testando aplicações DataSnap
Testando aplicações DataSnapTestando aplicações DataSnap
Testando aplicações DataSnap
 
Testando 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 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
 
Automação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e MobileAutomação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e Mobile
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
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
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira Ágil
 
Curso Básico de Selenium
Curso Básico de SeleniumCurso Básico de Selenium
Curso Básico de Selenium
 
Android DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoAndroid DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimento
 
Caipira agil automacao front end selenium
Caipira agil automacao front end seleniumCaipira agil automacao front end selenium
Caipira agil automacao front end selenium
 
Ideais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriverIdeais Cowabunga - Headless Testing com GhostDriver
Ideais Cowabunga - Headless Testing com GhostDriver
 
[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com Codeception[TDC2015] De unitário a aceitação: Automação de testes com Codeception
[TDC2015] De unitário a aceitação: Automação de testes com Codeception
 
Python 08
Python 08Python 08
Python 08
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
 
[GUTS-RS] Workshop (prático) de Testes Automatizados para dispositivos móveis...
[GUTS-RS] Workshop (prático) de Testes Automatizados para dispositivos móveis...[GUTS-RS] Workshop (prático) de Testes Automatizados para dispositivos móveis...
[GUTS-RS] Workshop (prático) de Testes Automatizados para dispositivos móveis...
 
Solucionando a Teoria do Caos com Cypress.io
Solucionando a Teoria do Caos com Cypress.ioSolucionando a Teoria do Caos com Cypress.io
Solucionando a Teoria do Caos com Cypress.io
 
Integração continua sem traumas
Integração continua sem traumasIntegração continua sem traumas
Integração continua sem traumas
 
Continuous Deployment e DevOps na Nuvem
Continuous Deployment e DevOps na NuvemContinuous Deployment e DevOps na Nuvem
Continuous Deployment e DevOps na Nuvem
 
Oficina Python e Google App Engine
Oficina Python e Google App EngineOficina Python e Google App Engine
Oficina Python e Google App Engine
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
 

Plus de Elias Nogueira

API Testing following the Test Pyramid
API Testing following the Test PyramidAPI Testing following the Test Pyramid
API Testing following the Test PyramidElias Nogueira
 
Coach por Imersão - Buscando a excelência técnica com o time
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
 
O Agile Coach pode (e muitas vezes deve) ser técnico
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
 
Create an architecture for web test automation
Create an architecture for web test automationCreate an architecture for web test automation
Create an architecture for web test automationElias 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
Como 4 Agile Coaches trabalham em uma Transformação Ágil Elias Nogueira
 
BDD não é automação de teste - Scrum Gathering
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 GatheringElias Nogueira
 
Improve Yourself -- Learn the Skills, Join the Community - Tests
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 - TestsElias Nogueira
 
BDD não é Automação de Testes
BDD não é Automação de TestesBDD não é Automação de Testes
BDD não é Automação de TestesElias Nogueira
 
Como ter sucesso ministrando uma palestra técnica
Como ter sucesso ministrando uma palestra técnicaComo ter sucesso ministrando uma palestra técnica
Como ter sucesso ministrando uma palestra técnicaElias 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?
Quais são os steps de que deve conter na sua pipeline?Elias Nogueira
 
Testes em todos os niveis de planejamento
Testes em todos os niveis de planejamentoTestes em todos os niveis de planejamento
Testes em todos os niveis de planejamentoElias Nogueira
 
Coaching the Agile Coach
Coaching the Agile CoachCoaching the Agile Coach
Coaching the Agile CoachElias Nogueira
 
Java Test Automation for REST, Web and Mobile
Java Test Automation for REST, Web and MobileJava Test Automation for REST, Web and Mobile
Java Test Automation for REST, Web and MobileElias Nogueira
 
Trust Your Pipeline - Automatically Testing and End-to-End Java Application
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 ApplicationElias Nogueira
 
O que é um Agile Coach
O que é um Agile CoachO que é um Agile Coach
O que é um Agile CoachElias Nogueira
 
A importancia de testes em todos os aspectos
A importancia de testes em todos os aspectosA importancia de testes em todos os aspectos
A importancia de testes em todos os aspectosElias Nogueira
 
Testes de ponta a ponta
Testes de ponta a pontaTestes de ponta a ponta
Testes de ponta a pontaElias Nogueira
 
Apenas um script de teste para iOS e Android
Apenas um script de teste para iOS e AndroidApenas um script de teste para iOS e Android
Apenas um script de teste para iOS e AndroidElias Nogueira
 

Plus de Elias Nogueira (20)

API Testing following the Test Pyramid
API Testing following the Test PyramidAPI Testing following the Test Pyramid
API Testing following the Test Pyramid
 
Coach por Imersão - Buscando a excelência técnica com o time
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
 
O Agile Coach pode (e muitas vezes deve) ser técnico
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
 
Create an architecture for web test automation
Create an architecture for web test automationCreate an architecture for web test automation
Create an architecture for web test automation
 
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
Como 4 Agile Coaches trabalham em uma Transformação Ágil
 
BDD não é automação de teste - Scrum Gathering
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
 
Improve Yourself -- Learn the Skills, Join the Community - Tests
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
 
BDD não é Automação de Testes
BDD não é Automação de TestesBDD não é Automação de Testes
BDD não é Automação de Testes
 
Como ter sucesso ministrando uma palestra técnica
Como ter sucesso ministrando uma palestra técnicaComo ter sucesso ministrando uma palestra técnica
Como ter sucesso ministrando uma palestra técnica
 
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?
Quais são os steps de que deve conter na sua pipeline?
 
Tem que testar mesmo?
Tem que testar mesmo?Tem que testar mesmo?
Tem que testar mesmo?
 
Testes em todos os niveis de planejamento
Testes em todos os niveis de planejamentoTestes em todos os niveis de planejamento
Testes em todos os niveis de planejamento
 
Coaching the Agile Coach
Coaching the Agile CoachCoaching the Agile Coach
Coaching the Agile Coach
 
Java Test Automation for REST, Web and Mobile
Java Test Automation for REST, Web and MobileJava Test Automation for REST, Web and Mobile
Java Test Automation for REST, Web and Mobile
 
Trust Your Pipeline - Automatically Testing and End-to-End Java Application
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
 
O que é um Agile Coach
O que é um Agile CoachO que é um Agile Coach
O que é um Agile Coach
 
A importancia de testes em todos os aspectos
A importancia de testes em todos os aspectosA importancia de testes em todos os aspectos
A importancia de testes em todos os aspectos
 
Testes de ponta a ponta
Testes de ponta a pontaTestes de ponta a ponta
Testes de ponta a ponta
 
O Testador Técnico
O Testador TécnicoO Testador Técnico
O Testador Técnico
 
Apenas um script de teste para iOS e Android
Apenas um script de teste para iOS e AndroidApenas um script de teste para iOS e Android
Apenas um script de teste para iOS e Android
 

Paralelize seus testes web e mobile para ter feedbacks mais rápidos

  • 1. PARALELIZE SEUS TESTES WEB E MOBILE PARA TER FEEDBACKS MAIS RÁPIDOS @eliasnogueira
  • 2. Problemas na execução de testes automatizados para web Tempo de execução dos testes Compatibilidade dos browsers/dispositivos
  • 6. Script de Teste Envia Capacidades NÓ Windows NÓ MacOSX NÓ Linux HUB Entende a capacidade e envia para o nó correto
  • 7. NÓ Windows NÓ MacOSX NÓ Linux
  • 8. 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 web
  • 10. • Depende de infraestrutura física • Dificuldade de escalar • Requer manutenção (atualizações) Problema com o grid web local
  • 11. 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
  • 12. 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
  • 13. Suite de Teste HUB 2 testes Google Chrome Execução sem auto-escala
  • 14. Suite de Teste HUB 4 testes Google Chrome Esperando 2 slots free.... Execução sem auto-escala
  • 15. Suite de Teste HUB 4 testes Google Chrome Execução sem auto-escala
  • 16. Suite de Teste HUB 4 testes Google Chrome Execução com auto-escala
  • 17. Suite de Teste HUB 4 testes Google Chrome Execução com auto-escala
  • 18. Suite de Teste HUB Execução com auto-escala
  • 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>
  • 20. 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
  • 21. 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
  • 22. 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
  • 23.
  • 24. 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
  • 25.
  • 26. Ganhos reais min Tempo atual para executar uma suíte com 61 testes em uma grid de 20 nós. min Tempo com abordagem de execução local (sequencial) de uma suíte com 61 testes. Tempo de execução para 15 suítes com 394 testes em grid min
  • 27. 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)
  • 28. Suíte de Testes 90 testes 90 testes 30 min 90 testes 30 min 90 testes 30 min Tempo total: 30 min
  • 29. 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
  • 31. Desafios: Foco no tipo de apps HTML/Browser Híbrido Nativo
  • 32. Desafios: Fragmentação Android Versão Codename AP I Distribuição 2.3.3 – 2.3.7 Gingerbread 10 0.6% 4.0.3 – 4.0.4 Ice cream Sanduich 15 0.6% 4.1.x Jelly Bean 16 4.2.x 17 4.3 18 4.4 KitKat 19 5.0 Lollipop 21 5.1 22 6.0 Marshmallow 23 7.0 Nougat 24 7.1 25 Gingerbread 0% Ice Cream 1% Jelly Bean 7% KitKat 15% Lollipop 29% Marshmallow 32% Nougat 16%
  • 36. Desafios: Foco na execução vs vs Cloud vs Device vs Emulator
  • 37. Desafios: Muitas frentes para testar https://www.ministryoftesting.com/2012/06/getting-started-with-mobile-testing-a-mindmap/
  • 38. Problema Execução automatizada de teste é feita ”um a um” Não há uma rápida resposta à cobertura de restrições Fabricante Tamanho de tela Versão de plataforma
  • 39. Script de Teste Nó 01 Nó 02 HUB
  • 40. O que eu preciso • Selenium Server [1] • Instalação do Appium via npm [2] • Dispositivos emulados ou reais • Script de Teste com: • Suporte a execução paralela (TestNG) • Arquitetura de teste que suporte a execução paralela • Criação do driver (execução no dispositivo sob demanda) [1] http://www.seleniumhq.org/download/#mainContent [2] https://www.npmjs.com/package/appium
  • 41. Passos para iniciar a grid • Iniciar Selenium Grid como role hub • Iniciar os nós (dispositivos) • Apontando para a URL e porta da GRID • Com portas do Appium (-p) e Bootstrap (-bp) diferentes dos demais • Informando o udid do dispositivo
  • 42. Script de Teste TestNG Selenium GRID http://192.168.1.31:4444 Nó 01 http://192.168.1.34:4723 Nó 02 http://192.168.1.35:4724 registra na grid -> <- executa teste arquivo .json arquivo .json registra na grid -> <- executa teste Informar alvos (nomes dispositivos) para execução
  • 43. Iniciando a grid $ java -jar selenium-server-standalone-3.9.1.jar -role hub -hubConfig grid.json { "port": 4444, "newSessionWaitTimeout": -1, "servlets" : [], "withoutServlets": [], "custom": {}, "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher", "throwOnCapabilityNotPresent": true, "cleanUpCycle": 2000, "role": "hub", "debug": false, "browserTimeout": 0, "timeout": 1800 } grid.json
  • 44. Iniciando a grid $ java -jar selenium-server-standalone-3.9.1.jar -role hub -hubConfig grid.json { "port": 4444, "newSessionWaitTimeout": -1, "servlets" : [], "withoutServlets": [], "custom": {}, // demais configurações ignoradas grid.json
  • 45. Iniciando os nós $ appium --nodeconfig json/android-6.json -p 4723 -bp 5523 -U emulator-5554 { "capabilities": [ { "browserName":"Android Marshmallow", "version":"6.0", "platform":"ANDROID", "maxInstances": 1 } ], "configuration": { "cleanUpCycle":2000, "timeout":20000, "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", "url": "http://127.0.0.1:4723/wd/hub", "host": "127.0.0.1", "port": 4723, "maxSession": 1, "register": true, "registerCycle": 1000, "hubPort": 4444, "hubHost": "192.168.0.102", "session-override": true } } android-6.json
  • 46. Iniciando os nós $ appium --nodeconfig json/android-6.json -p 4723 -bp 5523 -U emulator-5554 android-6.json { "capabilities": [ { "browserName":"Android Marshmallow", "version":"6.0", "platform":"ANDROID", "maxInstances": 1 } ],
  • 47. Iniciando os nós $ appium --nodeconfig json/android-6.json -p 4723 -bp 5523 -U emulator-5554 android-6.json { "configuration": { "cleanUpCycle":2000, "timeout":20000, "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", "url": "http://127.0.0.1:4723/wd/hub", "host": "127.0.0.1", "port": 4723,
  • 48. Iniciando os nós $ appium --nodeconfig json/android-6.json -p 4723 -bp 5523 -U emulator-5554 android-6.json "host": "127.0.0.1", "port": 4723, "maxSession": 1, "register": true, "registerCycle": 1000, "hubPort": 4444, "hubHost": "192.168.0.102", "session-override": true } }
  • 49. 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