Testes de UI
não aceite mais falso negativos
@andreitognolo
github.com/andreitognolo
andreitognolo@gmail.com
@snap_ci
Testes
unitários
Teste de
integração
Deploy
QA
Deploy
produção
Smoke
test
Testes
unitários
UI
Deploy

QA
Deploy
produção
S...
São Paulo / Recife / Porto Alegre / Belo Horizonte
Negócio
Sustentável
São Paulo / Recife / Porto Alegre / Belo Horizonte
Negócio
Sustentável
Excelência de
software
São Paulo / Recife / Porto Alegre / Belo Horizonte
Negócio
Sustentável
Excelência de
software
Justiça Social e
Econômica
São Paulo / Recife / Porto Alegre / Belo Horizonte
Martin Fowler
ThreePillars [1]
São Paulo / Recife / Porto Alegre / Belo Horizonte
Rápida definição:
falso negativos
Rápida definição: falso negativos
flaky test / non-determinism
Testes automatizados,
por onde começar?
2007/2008
Testes automatizados, por onde começar?
Testes automatizados, por onde começar?
Testes automatizados, por onde começar?
Independente de
implementação
Lentos
Falso negativos
Fácil de criar Difícil de manter
Testes de UI
Testes automatizados, p...
UI
Service
Unit
Testes automatizados, por onde começar?
UI
Service
Unit
Testes automatizados, por onde começar?
Vamos acabar com falso
negativos nos testes de UI
Martin Fowler
TestPyramid [2]
Even with good practices on writing
them, end-to-end tests are more
prone to non-determinism...
Vamos acabar com falso negativos nos testes de UI
35,63%
dos repositórios fizeram rerun (*)
* Referente ao mês de Junho
Testes de UI:
zero
falso negativos
Testes de UI:
não aceitei mais
falso negativos
Vamos acabar com falso negativos nos tes...
Pavan Sudarshan
No more flaky tests on the
Go team [3]
Acceptance test builds
can never be red
Vamos acabar com falso nega...
Testes
integrados
UI
Deploy

QA
Deploy
produção
Testes
unitários
Vamos acabar com falso negativos nos testes de UI
Testes
integrados
UI
Deploy

QA
Deploy
produção
Testes
unitários
Flaky tests
Vamos acabar com falso negativos nos testes d...
Criando UI testes
à prova de balas(quase)
Criando UI testes (quase) à prova de balas
Criando UI testes (quase) à prova de balas
Criando UI testes (quase) à prova de balas
Criando UI testes (quase) à prova de balas
Criando UI testes (quase) à prova de balas
Criando UI testes (quase) à prova de balas
Criando UI testes (quase) à prova de balas
1. Clicar no menu "Create"
2. Preencher os campos da empresa
3. Clicar no botão...
Criando UI testes (quase) à prova de balas
1. Clicar no menu "Create"
2. Preencher os campos da empresa
3. Clicar no botão...
Criando UI testes (quase) à prova de balas
1. Clicar no menu "Create"
2. Preencher os campos da empresa
3. Clicar no botão...
Criando UI testes (quase) à prova de balas
1. Clicar no menu "Create"
2. Preencher os campos da empresa
3. Clicar no botão...
Criando UI testes (quase) à prova de balas
1. Clicar no menu "Create"
2. Preencher os campos da empresa
3. Clicar no botão...
Criando UI testes (quase) à prova de balas
1. Clicar no menu "Create"
2. Preencher os campos da empresa
3. Clicar no botão...
Criando UI testes (quase) à prova de balas
1. Clicar no menu "Create"
2. Preencher os campos da empresa
3. Clicar no botão...
Criando UI testes (quase) à prova de balas
Por que UI testes são mais propensos a
falso negativos?
Sim, requisições assínc...
Criando UI testes (quase) à prova de balas
1. Clicar no menu "Create"
2. Preencher os campos da empresa
3. Clicar no botão...
Criando UI testes (quase) à prova de balas
1. Clicar no menu "Create"
2. Preencher os campos da empresa
3. Clicar no botão...
Criando UI testes (quase) à prova de balas
1. Clicar no menu "Create"
2. Preencher os campos da empresa
3. Clicar no botão...
Criando UI testes (quase) à prova de balas
Agora vamos implementar os outros testes
necessários!
Criando UI testes (quase) à prova de balas
Exemplo em Selenium
Exemplo em Selenium
Mas, não se iluda, um dia algum
teste vai falhar no CI
Mas, não se iluda, um dia algum teste vai falhar no CI
Por que é tão difícil resolver um teste de UI?
* O teste é intermit...
Mas, não se iluda, um dia algum teste vai falhar no CI
Por que é tão difícil resolver um teste de UI?
* Ele é lento para r...
Mas, não se iluda, um dia algum teste vai falhar no CI
Por que é tão difícil resolver um teste de UI?
(Java) Selenium
(Rub...
Mas, não se iluda, um dia algum teste vai falhar no CI
Por que é tão difícil resolver um teste de UI?
QUnit Driver
Firefox...
Mas, não se iluda, um dia algum teste vai falhar no CI
Por que é tão difícil resolver um teste de UI?
Driver
Browser
QUnit
Mas, não se iluda, um dia algum teste vai falhar no CI
QUnit
Assíncrono: Start/Stop
QUnit Page
QUnit Page
Javascript
Foco em
waits
Qualquer
browser
@andreitognolo
github.com/andreitognolo
andreitognolo@gmail.com
Obrigado!
is hiring!
http://join.thoughtworks.com/
@snap_ci
Referências
[1] ThreePillars - http://martinfowler.com/bliki/ThreePillars.html
[2] TestPyramid - http://martinfowler.com/b...
Próximos SlideShares
Carregando em…5
×

Testes UI: não aceite mais falso negativos

1.320 visualizações

Publicada em

No mês de junho, 37% dos repositórios que rodaram suas builds no SnapCI utilizaram a funcionalidade de rerun. Essa palestra mostra como você pode tentar evitar UI flaky tests.

Publicada em: Software

Testes UI: não aceite mais falso negativos

  1. 1. Testes de UI não aceite mais falso negativos
  2. 2. @andreitognolo github.com/andreitognolo andreitognolo@gmail.com @snap_ci
  3. 3. Testes unitários Teste de integração Deploy QA Deploy produção Smoke test Testes unitários UI Deploy QA Deploy produção Smoke test
  4. 4. São Paulo / Recife / Porto Alegre / Belo Horizonte
  5. 5. Negócio Sustentável São Paulo / Recife / Porto Alegre / Belo Horizonte
  6. 6. Negócio Sustentável Excelência de software São Paulo / Recife / Porto Alegre / Belo Horizonte
  7. 7. Negócio Sustentável Excelência de software Justiça Social e Econômica São Paulo / Recife / Porto Alegre / Belo Horizonte
  8. 8. Martin Fowler ThreePillars [1] São Paulo / Recife / Porto Alegre / Belo Horizonte
  9. 9. Rápida definição: falso negativos
  10. 10. Rápida definição: falso negativos flaky test / non-determinism
  11. 11. Testes automatizados, por onde começar?
  12. 12. 2007/2008 Testes automatizados, por onde começar?
  13. 13. Testes automatizados, por onde começar?
  14. 14. Testes automatizados, por onde começar?
  15. 15. Independente de implementação Lentos Falso negativos Fácil de criar Difícil de manter Testes de UI Testes automatizados, por onde começar?
  16. 16. UI Service Unit Testes automatizados, por onde começar?
  17. 17. UI Service Unit Testes automatizados, por onde começar?
  18. 18. Vamos acabar com falso negativos nos testes de UI
  19. 19. Martin Fowler TestPyramid [2] Even with good practices on writing them, end-to-end tests are more prone to non-determinism problems, which can undermine trust in them Vamos acabar com falso negativos nos testes de UI
  20. 20. Vamos acabar com falso negativos nos testes de UI 35,63% dos repositórios fizeram rerun (*) * Referente ao mês de Junho
  21. 21. Testes de UI: zero falso negativos Testes de UI: não aceitei mais falso negativos Vamos acabar com falso negativos nos testes de UI
  22. 22. Pavan Sudarshan No more flaky tests on the Go team [3] Acceptance test builds can never be red Vamos acabar com falso negativos nos testes de UI
  23. 23. Testes integrados UI Deploy QA Deploy produção Testes unitários Vamos acabar com falso negativos nos testes de UI
  24. 24. Testes integrados UI Deploy QA Deploy produção Testes unitários Flaky tests Vamos acabar com falso negativos nos testes de UI
  25. 25. Criando UI testes à prova de balas(quase)
  26. 26. Criando UI testes (quase) à prova de balas
  27. 27. Criando UI testes (quase) à prova de balas
  28. 28. Criando UI testes (quase) à prova de balas
  29. 29. Criando UI testes (quase) à prova de balas
  30. 30. Criando UI testes (quase) à prova de balas
  31. 31. Criando UI testes (quase) à prova de balas
  32. 32. Criando UI testes (quase) à prova de balas 1. Clicar no menu "Create" 2. Preencher os campos da empresa 3. Clicar no botão "Save" 4. Clicar no menu "Search" 5. Preencher o campo nome e clicar em "Apply" 6. Verificar que a empresa está presente na tabela
  33. 33. Criando UI testes (quase) à prova de balas 1. Clicar no menu "Create" 2. Preencher os campos da empresa 3. Clicar no botão "Save" 4. Clicar no menu "Search" 5. Preencher o campo nome e clicar em "Apply" 6. Verificar que a empresa está presente na tabela
  34. 34. Criando UI testes (quase) à prova de balas 1. Clicar no menu "Create" 2. Preencher os campos da empresa 3. Clicar no botão "Save" 4. Clicar no menu "Search" 5. Preencher o campo nome e clicar em "Apply" 6. Verificar que a empresa está presente na tabela
  35. 35. Criando UI testes (quase) à prova de balas 1. Clicar no menu "Create" 2. Preencher os campos da empresa 3. Clicar no botão "Save" 4. Clicar no menu "Search" 5. Preencher o campo nome e clicar em "Apply" 6. Verificar que a empresa está presente na tabela
  36. 36. Criando UI testes (quase) à prova de balas 1. Clicar no menu "Create" 2. Preencher os campos da empresa 3. Clicar no botão "Save" 4. Clicar no menu "Search" 5. Preencher o campo nome e clicar em "Apply" 6. Verificar que a empresa está presente na tabela
  37. 37. Criando UI testes (quase) à prova de balas 1. Clicar no menu "Create" 2. Preencher os campos da empresa 3. Clicar no botão "Save" 4. Clicar no menu "Search" 5. Preencher o campo nome e clicar em "Apply" 6. Verificar que a empresa está presente na tabela
  38. 38. Criando UI testes (quase) à prova de balas 1. Clicar no menu "Create" 2. Preencher os campos da empresa 3. Clicar no botão "Save" 4. Clicar no menu "Search" 5. Preencher o campo nome e clicar em "Apply" 6. Verificar que a empresa está presente na tabela
  39. 39. Criando UI testes (quase) à prova de balas Por que UI testes são mais propensos a falso negativos? Sim, requisições assíncronas!
  40. 40. Criando UI testes (quase) à prova de balas 1. Clicar no menu "Create" 2. Preencher os campos da empresa 3. Clicar no botão "Save" 4. Clicar no menu "Search" 5. Preencher o campo nome e clicar em "Apply" 6. Verificar que a empresa está presente na tabela wait "Form" wait "Apply" wait "Table" wait "Menu" 4 seg 1 seg 1 seg 1 seg
  41. 41. Criando UI testes (quase) à prova de balas 1. Clicar no menu "Create" 2. Preencher os campos da empresa 3. Clicar no botão "Save" 4. Clicar no menu "Search" 5. Preencher o campo nome e clicar em "Apply" 6. Verificar que a empresa está presente na tabela wait "Form" wait "Apply" wait "Table" wait "Menu" 4 seg 1 seg 1 seg 1 seg wait "mensagem"
  42. 42. Criando UI testes (quase) à prova de balas 1. Clicar no menu "Create" 2. Preencher os campos da empresa 3. Clicar no botão "Save" 4. Clicar no menu "Search" 5. Preencher o campo nome e clicar em "Apply" 6. Verificar que a empresa está presente na tabela wait "Form" wait "Apply" wait “Table" (linha) wait "Menu" 4 seg 1 seg 1 seg 1 seg wait "mensagem"
  43. 43. Criando UI testes (quase) à prova de balas Agora vamos implementar os outros testes necessários!
  44. 44. Criando UI testes (quase) à prova de balas
  45. 45. Exemplo em Selenium
  46. 46. Exemplo em Selenium
  47. 47. Mas, não se iluda, um dia algum teste vai falhar no CI
  48. 48. Mas, não se iluda, um dia algum teste vai falhar no CI Por que é tão difícil resolver um teste de UI? * O teste é intermitente * Ele é lento para rodar * Em geral, existem muitas camadas de abstração até o browser Faz parte da natureza do teste
  49. 49. Mas, não se iluda, um dia algum teste vai falhar no CI Por que é tão difícil resolver um teste de UI? * Ele é lento para rodar * Em geral, existem muitas camadas de abstração até o browser Ainda vamos evoluir
  50. 50. Mas, não se iluda, um dia algum teste vai falhar no CI Por que é tão difícil resolver um teste de UI? (Java) Selenium (Ruby) Capybara Driver Firefox Chrome PhantomJS
  51. 51. Mas, não se iluda, um dia algum teste vai falhar no CI Por que é tão difícil resolver um teste de UI? QUnit Driver Firefox Chrome PhantomJS
  52. 52. Mas, não se iluda, um dia algum teste vai falhar no CI Por que é tão difícil resolver um teste de UI? Driver Browser QUnit
  53. 53. Mas, não se iluda, um dia algum teste vai falhar no CI QUnit Assíncrono: Start/Stop
  54. 54. QUnit Page
  55. 55. QUnit Page Javascript Foco em waits Qualquer browser
  56. 56. @andreitognolo github.com/andreitognolo andreitognolo@gmail.com Obrigado! is hiring! http://join.thoughtworks.com/ @snap_ci
  57. 57. Referências [1] ThreePillars - http://martinfowler.com/bliki/ThreePillars.html [2] TestPyramid - http://martinfowler.com/bliki/TestPyramid.html [3] No more flaky tests on the Go team - http://www.thoughtworks.com/insights/blog/no-more-flaky- tests-go-team

×