Testes UI: Não aceite mais falso negativos
-
Upload
thoughtworks -
Category
Technology
-
view
416 -
download
0
Transcript of Testes UI: Não aceite mais falso negativos
Testes de UI não aceite mais falso negativos
@andreitognologithub.com/[email protected]
@snap_ci
Testes unitários
Teste de integração
Deploy QA
Deploy produção
Smoke test
Testes unitários UI Deploy
QADeploy
produçãoSmoke
test
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
http://blog.ninlabs.com/2013/01/programmer-interrupted/
Rápida definição: falso negativos
Rápida definição: falso negativos
flaky test / non-determinism
http://blog.ninlabs.com/2013/01/programmer-interrupted/
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, por onde começar?
UI
Service
Unit
Testes automatizados, por onde começar?
UI
Service
Unit
Testes automatizados, por onde começar?
http://blog.ninlabs.com/2013/01/programmer-interrupted/
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 problems, which can undermine trust in them
Vamos acabar com falso negativos nos testes de UI
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 testes de UI
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
Testes integrados UI Deploy
QADeploy
produçãoTestes
unitários
Vamos acabar com falso negativos nos testes de UI
Testes integrados UI Deploy
QADeploy
produçãoTestes
unitários Flaky tests
Vamos acabar com falso negativos nos testes de UI
http://blog.ninlabs.com/2013/01/programmer-interrupted/
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 "Save"
4. Clicar no menu "Search"
5. Preencher o campo nome e clicar em "Apply"
6. Verificar que a empresa está presente na tabela
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
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
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
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
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
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
Criando UI testes (quase) à prova de balas
Por que UI testes são mais propensos a falso negativos?
Sim, requisições assíncronas!
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
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"
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"
Criando UI testes (quase) à prova de balas
Agora vamos implementar os outros testes necessários!
Criando UI testes (quase) à prova de balas
http://blog.ninlabs.com/2013/01/programmer-interrupted/
Exemplo em Selenium
Exemplo em Selenium
http://blog.ninlabs.com/2013/01/programmer-interrupted/
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 é intermitente
* Ele é lento para rodar
* Em geral, existem muitas camadas de abstração até o browser
Faz parte da natureza do teste
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 browserAinda vamos
evoluir
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) CapybaraDriver
Firefox
Chrome
PhantomJS
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
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
http://blog.ninlabs.com/2013/01/programmer-interrupted/
QUnit Page
http://blog.ninlabs.com/2013/01/programmer-interrupted/
QUnit Page
JavascriptFoco em
waitsQualquer browser
@andreitognologithub.com/[email protected]
Obrigado! is hiring!
http://join.thoughtworks.com/
@snap_ci
http://blog.ninlabs.com/2013/01/programmer-interrupted/
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