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

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

Palestra ministrada em 19/04/2018 na Trilha Mobile do The Developers Conference Florianópolis que fala como criar um device farm para a execução de testes paralelos usando Appium

  • Login to see the comments

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

  1. 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. 2. Desafios HTML/Browser Híbrido Nativo Foco correto para cada tipo de app
  3. 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. 4. Fragmentação das plataformas - iOS Desafios https://developer.apple.com/support/appstore Anteriores 2% iOS 9 9% iOS 10 89%
  5. 5. Fragmentação de Dispositivos • 16 iOS • 24,093 Android Desafios http://iossupportmatrix.com/ https://opensignal.com/reports/2015/08/android-fragmentation/
  6. 6. Tamanho de Tela Desafios http://iossupportmatrix.com/ https://opensignal.com/reports/2015/08/android-fragmentation/
  7. 7. Foco de execução • Cloud vs Device vs Emulador Desafios vs vs
  8. 8. Diversas frentes para testar https://www.ministryoftesting.com/2012/06/getting-started-with-mobile-testing-a-mindmap/
  9. 9. Definir o trabalho em conjunto com um processo http://www.softwaretestingclass.com/introduction-to-mobile-application-testing/
  10. 10. Criando uma grid para execução de teste automatizado funcional e e2e
  11. 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. 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. 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. 14. Arquitetura base de um grid Script de Teste Nó 01 Nó 02 HUB
  15. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  28. 28. Hora do truque...
  29. 29. Obrigado @eliasnogueira http://eliasnogueira.com https://slideshare.net/elias.nogueira https://facebook.com/elias.nogueira.teste https://github.com/eliasnogueira/appium-parallel-execution

×