SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
Criando uma grid (device farm)
para execução de teste paralelo
com Appium
Elias Nogueira QA Engineer | Agile Coach, Sicredi
@eliasnogueira
http://eliasnogueira.com
Desafios
HTML/Browser Híbrido Nativo
Foco correto para cada tipo de app
Fragmentação das plataformas - Android
Desafios
Versão Codename API 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
https://developer.android.com/about/dashboards/index.html
Gingerbread
0%
Ice Cream
1% Jelly Bean
7%
KitKat
15%
Lollipop
29%
Marshmallow
32%
Nougat
16%
Fragmentação das plataformas - iOS
Desafios
https://developer.apple.com/support/appstore
Anteriores
2%
iOS 9
9%
iOS 10
89%
Fragmentação de Dispositivos
• 16 iOS
• 24,093 Android
Desafios
http://iossupportmatrix.com/ https://opensignal.com/reports/2015/08/android-fragmentation/
Tamanho de Tela
Desafios
http://iossupportmatrix.com/ https://opensignal.com/reports/2015/08/android-fragmentation/
Foco de execução
• Cloud vs Device vs Emulador
Desafios
vs vs
Diversas frentes para testar
https://www.ministryoftesting.com/2012/06/getting-started-with-mobile-testing-a-mindmap/
Definir o trabalho em conjunto com um processo
http://www.softwaretestingclass.com/introduction-to-mobile-application-testing/
Criando uma grid para
execução de teste
automatizado funcional e e2e
• 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
O problema...
Grid
Grid é uma forma de conectar todos os seus dispositivos em um
único controlador (hub).
Cada dispositivo deve ser gerenciado pelo seu serial/udid
Execução na grid
No script de teste devemos informar para qual dispositivo
(serial/udid) queremos executar o teste
Execução paralela
Uma execução paralela é aquela onde os testes selecionados são
executados em mais de um dispositivo na grid ao mesmo tempo
Como funciona um grid?
• A máquina que gerencia as execuções é chamada de hub
• As máquinas (dispositivos) que receberão o teste são
chamadas de nó
• Os nós devem se registrar no hub com uma série de
informações
Como funciona um grid?
Arquitetura base de um grid
Script de Teste
Nó 01 Nó 02
HUB
• Validação de suporte a outros idiomas
• Validação em diferentes versões de plataforma
• Validação em diferentes resoluções
• Validações em diferentes fabricantes
• Minimizar o tempo de execução de teste
Benefícios do Teste em Paralelo
• 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)
O que eu preciso?
[1] http://www.seleniumhq.org/download/#mainContent
[2] https://www.npmjs.com/package/appium
• 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
Passos para iniciar a Grid
Arquitetura base de um grid
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
$ java -jar selenium-server-standalone-3.9.1.jar -role hub -hubConfig grid.json
Iniciando a grid
{
"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
$ java -jar selenium-server-standalone-3.9.1.jar -role hub -hubConfig grid.json
Iniciando a grid
{
"port": 4444,
"newSessionWaitTimeout": -1,
"servlets" : [],
"withoutServlets": [],
"custom": {},
// demais configurações ignoradas
grid.json
$ appium --nodeconfig json/android-6.json -p 4723 -bp 5523 -U emulator-5554
Iniciando um nó
{
"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
$ appium --nodeconfig json/android-6.json -p 4723 -bp 5523 -U emulator-5554
Iniciando um nó
{
"capabilities":
[
{
"browserName":"Android Marshmallow",
"version":"6.0",
"platform":"ANDROID",
"maxInstances": 1
}
],
android-6.json
$ appium --nodeconfig json/android-6.json -p 4723 -bp 5523 -U emulator-5554
Iniciando um nó
{
"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,
android-6.json
$ appium --nodeconfig json/android-6.json -p 4723 -bp 5523 -U emulator-5554
Iniciando um nó
"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
Script de Teste + Suíte paralela
private AppiumDriver<?> driver;
@Test
@Parameters( { "platform", "udid", "platformVersion"})
public void testCalculateDefaultTip(String platform, String udid,
String platformVersion) throws Exception {
<test name="Android-AVD">
<parameter name="platform" value="android"/>
<parameter name="udid" value="emulator-5554"/>
<parameter name="platformVersion" value="7.0"/>
<classes>
<class name="com.eliasnogueira.unique_script.TipTest"/>
</classes>
</test>
Script de Teste + Suíte paralela
private AppiumDriver<?> driver;
@Test
@Parameters( { "platform", "udid", "platformVersion"})
public void testCalculateDefaultTip(String platform, String udid,
String platformVersion) throws Exception {
<test name="Android-AVD">
<parameter name="platform" value="android"/>
<parameter name="udid" value="emulator-5554"/>
<parameter name="platformVersion" value="7.0"/>
<classes>
<class name="com.eliasnogueira.unique_script.TipTest"/>
</classes>
</test>
• Use sempre uma máquina Linux
• Boa prática reiniciar o ADB em uma execução paralela
• Para device reais, use um hub USB energizado
• [Appium] Use o selenium-server < 3.8
• O Appium ainda não está suportando totalmente o protocolo no W3C
• Exception apresentada: CapabilityNotPresentOnTheGridException
Minhas recomendações
Hora do truque...
Obrigado
@eliasnogueira
http://eliasnogueira.com
https://slideshare.net/elias.nogueira
https://facebook.com/elias.nogueira.teste
https://github.com/eliasnogueira/appium-parallel-execution

Mais conteúdo relacionado

Mais procurados

Usando containers com auto-escala de testes
Usando containers com auto-escala de testesUsando containers com auto-escala de testes
Usando containers com auto-escala de testesElias Nogueira
 
Web automation using selenium.ppt
Web automation using selenium.pptWeb automation using selenium.ppt
Web automation using selenium.pptAna Sarbescu
 
[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
 
Getting started with appium
Getting started with appiumGetting started with appium
Getting started with appiumPratik Patel
 
Appium basics
Appium basicsAppium basics
Appium basicsSyam Sasi
 
Cross browser testing using BrowserStack
Cross browser testing using BrowserStack Cross browser testing using BrowserStack
Cross browser testing using BrowserStack RapidValue
 
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019Sargis Sargsyan
 
Automation Testing using Selenium Webdriver
Automation Testing using Selenium WebdriverAutomation Testing using Selenium Webdriver
Automation Testing using Selenium WebdriverPankaj Biswas
 
Automation - web testing with selenium
Automation - web testing with seleniumAutomation - web testing with selenium
Automation - web testing with seleniumTzirla Rozental
 
Introduction To Appium With Robotframework
Introduction To Appium With RobotframeworkIntroduction To Appium With Robotframework
Introduction To Appium With RobotframeworkSyam Sasi
 
Introduction to Bdd and cucumber
Introduction to Bdd and cucumberIntroduction to Bdd and cucumber
Introduction to Bdd and cucumberNibu Baby
 
JMeter JMX Script Creation via BlazeMeter
JMeter JMX Script Creation via BlazeMeterJMeter JMX Script Creation via BlazeMeter
JMeter JMX Script Creation via BlazeMeterRapidValue
 
Automated Testing vs Manual Testing
Automated Testing vs Manual TestingAutomated Testing vs Manual Testing
Automated Testing vs Manual TestingDirecti Group
 
Appium & Robot Framework
Appium & Robot FrameworkAppium & Robot Framework
Appium & Robot FrameworkFurkan Ertürk
 
Data driven Automation Framework with Selenium
Data driven Automation Framework with Selenium Data driven Automation Framework with Selenium
Data driven Automation Framework with Selenium Edureka!
 
API Testing. Streamline your testing process.
API Testing. Streamline your testing process.API Testing. Streamline your testing process.
API Testing. Streamline your testing process.Andrey Oleynik
 

Mais procurados (20)

Usando containers com auto-escala de testes
Usando containers com auto-escala de testesUsando containers com auto-escala de testes
Usando containers com auto-escala de testes
 
Web automation using selenium.ppt
Web automation using selenium.pptWeb automation using selenium.ppt
Web automation using selenium.ppt
 
[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)
 
Getting started with appium
Getting started with appiumGetting started with appium
Getting started with appium
 
Appium basics
Appium basicsAppium basics
Appium basics
 
Cross browser testing using BrowserStack
Cross browser testing using BrowserStack Cross browser testing using BrowserStack
Cross browser testing using BrowserStack
 
Browser_Stack_Intro
Browser_Stack_IntroBrowser_Stack_Intro
Browser_Stack_Intro
 
50 Soruda Yazılım Testi
50 Soruda Yazılım Testi50 Soruda Yazılım Testi
50 Soruda Yazılım Testi
 
Appium
AppiumAppium
Appium
 
Cucumber BDD
Cucumber BDDCucumber BDD
Cucumber BDD
 
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
Appium Dockerization: from Scratch to Advanced Implementation - HUSTEF 2019
 
Automation Testing using Selenium Webdriver
Automation Testing using Selenium WebdriverAutomation Testing using Selenium Webdriver
Automation Testing using Selenium Webdriver
 
Automation - web testing with selenium
Automation - web testing with seleniumAutomation - web testing with selenium
Automation - web testing with selenium
 
Introduction To Appium With Robotframework
Introduction To Appium With RobotframeworkIntroduction To Appium With Robotframework
Introduction To Appium With Robotframework
 
Introduction to Bdd and cucumber
Introduction to Bdd and cucumberIntroduction to Bdd and cucumber
Introduction to Bdd and cucumber
 
JMeter JMX Script Creation via BlazeMeter
JMeter JMX Script Creation via BlazeMeterJMeter JMX Script Creation via BlazeMeter
JMeter JMX Script Creation via BlazeMeter
 
Automated Testing vs Manual Testing
Automated Testing vs Manual TestingAutomated Testing vs Manual Testing
Automated Testing vs Manual Testing
 
Appium & Robot Framework
Appium & Robot FrameworkAppium & Robot Framework
Appium & Robot Framework
 
Data driven Automation Framework with Selenium
Data driven Automation Framework with Selenium Data driven Automation Framework with Selenium
Data driven Automation Framework with Selenium
 
API Testing. Streamline your testing process.
API Testing. Streamline your testing process.API Testing. Streamline your testing process.
API Testing. Streamline your testing process.
 

Semelhante a Criando uma grid para execução de testes paralelo com Appium

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
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
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
 
Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!Fabio Vieira Mello
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...tdc-globalcode
 
Treinamento Android Embarcado
Treinamento Android EmbarcadoTreinamento Android Embarcado
Treinamento Android EmbarcadoOdair Sousa
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosThiago Soares
 
Testando a integração com APIs - RSonRails/11
Testando a integração com APIs - RSonRails/11Testando a integração com APIs - RSonRails/11
Testando a integração com APIs - RSonRails/11Rafael Souza
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014Giovanni Bassi
 
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
 
Implementando uma Device Farm Android
Implementando uma Device Farm AndroidImplementando uma Device Farm Android
Implementando uma Device Farm AndroidThialison Souza
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterEric Silva
 
Workshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaWorkshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaSensedia
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?Rafael Benevides
 
2016/08/19 - Uma visão geral da AWS para desenvolvedores
2016/08/19 - Uma visão geral da AWS para desenvolvedores2016/08/19 - Uma visão geral da AWS para desenvolvedores
2016/08/19 - Uma visão geral da AWS para desenvolvedoresJardel Weyrich
 
Aula Aula03 estrutura phone_gap
Aula Aula03 estrutura phone_gapAula Aula03 estrutura phone_gap
Aula Aula03 estrutura phone_gapRoberson Alves
 
[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
 

Semelhante a Criando uma grid para execução de testes paralelo com Appium (20)

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
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
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
 
De 0 a DevOps
De 0 a DevOpsDe 0 a DevOps
De 0 a DevOps
 
Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!Zabbix e KACE, uma boa ideia, e porque não!
Zabbix e KACE, uma boa ideia, e porque não!
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
 
Treinamento Android Embarcado
Treinamento Android EmbarcadoTreinamento Android Embarcado
Treinamento Android Embarcado
 
Python 08
Python 08Python 08
Python 08
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
 
Testando a integração com APIs - RSonRails/11
Testando a integração com APIs - RSonRails/11Testando a integração com APIs - RSonRails/11
Testando a integração com APIs - RSonRails/11
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014
 
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
 
Implementando uma Device Farm Android
Implementando uma Device Farm AndroidImplementando uma Device Farm Android
Implementando uma Device Farm Android
 
Html5
Html5Html5
Html5
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
 
Workshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha BásicaWorkshop Hands-On APIX 2018 - Trilha Básica
Workshop Hands-On APIX 2018 - Trilha Básica
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
2016/08/19 - Uma visão geral da AWS para desenvolvedores
2016/08/19 - Uma visão geral da AWS para desenvolvedores2016/08/19 - Uma visão geral da AWS para desenvolvedores
2016/08/19 - Uma visão geral da AWS para desenvolvedores
 
Workshop - Ionic + firebase
Workshop - Ionic + firebaseWorkshop - Ionic + firebase
Workshop - Ionic + firebase
 
Aula Aula03 estrutura phone_gap
Aula Aula03 estrutura phone_gapAula Aula03 estrutura phone_gap
Aula Aula03 estrutura phone_gap
 
[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...
 

Mais de Elias Nogueira

Criando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredCriando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredElias 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
 
De a máxima cobertura nos seus testes de API
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
 
Automação e virtualização de serviços
Automação e virtualização de serviçosAutomação e virtualização de serviços
Automação e virtualização de serviçosElias 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
 
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
 
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
 
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...
Confie no seu pipeline: Teste automaticamente um aplicativo Java de ponta a p...Elias 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
 

Mais de Elias Nogueira (20)

Criando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredCriando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssured
 
API Testing following the Test Pyramid
API Testing following the Test PyramidAPI Testing following the Test Pyramid
API Testing following the Test Pyramid
 
De a máxima cobertura nos seus testes de API
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
 
Automação e virtualização de serviços
Automação e virtualização de serviçosAutomação e virtualização de serviços
Automação e virtualização de serviços
 
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
 
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
 
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
 
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...
Confie no seu pipeline: Teste automaticamente um aplicativo Java de ponta a p...
 
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
 

Criando uma grid para execução de testes paralelo com Appium

  • 1. Criando uma grid (device farm) para execução de teste paralelo com Appium Elias Nogueira QA Engineer | Agile Coach, Sicredi @eliasnogueira http://eliasnogueira.com
  • 2. Desafios HTML/Browser Híbrido Nativo Foco correto para cada tipo de app
  • 3. Fragmentação das plataformas - Android Desafios Versão Codename API 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 https://developer.android.com/about/dashboards/index.html Gingerbread 0% Ice Cream 1% Jelly Bean 7% KitKat 15% Lollipop 29% Marshmallow 32% Nougat 16%
  • 4. Fragmentação das plataformas - iOS Desafios https://developer.apple.com/support/appstore Anteriores 2% iOS 9 9% iOS 10 89%
  • 5. Fragmentação de Dispositivos • 16 iOS • 24,093 Android Desafios http://iossupportmatrix.com/ https://opensignal.com/reports/2015/08/android-fragmentation/
  • 6. Tamanho de Tela Desafios http://iossupportmatrix.com/ https://opensignal.com/reports/2015/08/android-fragmentation/
  • 7. Foco de execução • Cloud vs Device vs Emulador Desafios vs vs
  • 8. Diversas frentes para testar https://www.ministryoftesting.com/2012/06/getting-started-with-mobile-testing-a-mindmap/
  • 9. Definir o trabalho em conjunto com um processo http://www.softwaretestingclass.com/introduction-to-mobile-application-testing/
  • 10. Criando uma grid para execução de teste automatizado funcional e e2e
  • 11. • 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 O problema...
  • 12. Grid Grid é uma forma de conectar todos os seus dispositivos em um único controlador (hub). Cada dispositivo deve ser gerenciado pelo seu serial/udid Execução na grid No script de teste devemos informar para qual dispositivo (serial/udid) queremos executar o teste Execução paralela Uma execução paralela é aquela onde os testes selecionados são executados em mais de um dispositivo na grid ao mesmo tempo Como funciona um grid?
  • 13. • A máquina que gerencia as execuções é chamada de hub • As máquinas (dispositivos) que receberão o teste são chamadas de nó • Os nós devem se registrar no hub com uma série de informações Como funciona um grid?
  • 14. Arquitetura base de um grid Script de Teste Nó 01 Nó 02 HUB
  • 15. • Validação de suporte a outros idiomas • Validação em diferentes versões de plataforma • Validação em diferentes resoluções • Validações em diferentes fabricantes • Minimizar o tempo de execução de teste Benefícios do Teste em Paralelo
  • 16. • 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) O que eu preciso? [1] http://www.seleniumhq.org/download/#mainContent [2] https://www.npmjs.com/package/appium
  • 17. • 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 Passos para iniciar a Grid
  • 18. Arquitetura base de um grid 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
  • 19. $ java -jar selenium-server-standalone-3.9.1.jar -role hub -hubConfig grid.json Iniciando a grid { "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
  • 20. $ java -jar selenium-server-standalone-3.9.1.jar -role hub -hubConfig grid.json Iniciando a grid { "port": 4444, "newSessionWaitTimeout": -1, "servlets" : [], "withoutServlets": [], "custom": {}, // demais configurações ignoradas grid.json
  • 21. $ appium --nodeconfig json/android-6.json -p 4723 -bp 5523 -U emulator-5554 Iniciando um nó { "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
  • 22. $ appium --nodeconfig json/android-6.json -p 4723 -bp 5523 -U emulator-5554 Iniciando um nó { "capabilities": [ { "browserName":"Android Marshmallow", "version":"6.0", "platform":"ANDROID", "maxInstances": 1 } ], android-6.json
  • 23. $ appium --nodeconfig json/android-6.json -p 4723 -bp 5523 -U emulator-5554 Iniciando um nó { "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, android-6.json
  • 24. $ appium --nodeconfig json/android-6.json -p 4723 -bp 5523 -U emulator-5554 Iniciando um nó "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
  • 25. Script de Teste + Suíte paralela private AppiumDriver<?> driver; @Test @Parameters( { "platform", "udid", "platformVersion"}) public void testCalculateDefaultTip(String platform, String udid, String platformVersion) throws Exception { <test name="Android-AVD"> <parameter name="platform" value="android"/> <parameter name="udid" value="emulator-5554"/> <parameter name="platformVersion" value="7.0"/> <classes> <class name="com.eliasnogueira.unique_script.TipTest"/> </classes> </test>
  • 26. Script de Teste + Suíte paralela private AppiumDriver<?> driver; @Test @Parameters( { "platform", "udid", "platformVersion"}) public void testCalculateDefaultTip(String platform, String udid, String platformVersion) throws Exception { <test name="Android-AVD"> <parameter name="platform" value="android"/> <parameter name="udid" value="emulator-5554"/> <parameter name="platformVersion" value="7.0"/> <classes> <class name="com.eliasnogueira.unique_script.TipTest"/> </classes> </test>
  • 27. • Use sempre uma máquina Linux • Boa prática reiniciar o ADB em uma execução paralela • Para device reais, use um hub USB energizado • [Appium] Use o selenium-server < 3.8 • O Appium ainda não está suportando totalmente o protocolo no W3C • Exception apresentada: CapabilityNotPresentOnTheGridException Minhas recomendações