Testes UI: não aceite mais falso negativos

Post on 14-Aug-2015

363 views 4 download

Transcript of Testes UI: não aceite mais falso negativos

Testes de UI não aceite mais falso negativos

@andreitognologithub.com/andreitognoloandreitognolo@gmail.com

@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/andreitognoloandreitognolo@gmail.com

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