testando aplicações django: quando, como e onde?

56
Testando Aplicações Django Como? Quando? Onde? Bernardo Fontes @bbfontes

Upload: bernardo-fontes

Post on 11-Jun-2015

4.925 views

Category:

Technology


4 download

DESCRIPTION

Testar

TRANSCRIPT

Page 1: Testando Aplicações Django: Quando, Como e Onde?

Testando Aplicações Django

Como? Quando? Onde?

Bernardo Fontes@bbfontes

Page 2: Testando Aplicações Django: Quando, Como e Onde?

@bbfontes – bernardofontes.net – [email protected]

Page 3: Testando Aplicações Django: Quando, Como e Onde?
Page 4: Testando Aplicações Django: Quando, Como e Onde?

Por que testar?

Page 5: Testando Aplicações Django: Quando, Como e Onde?
Page 6: Testando Aplicações Django: Quando, Como e Onde?
Page 7: Testando Aplicações Django: Quando, Como e Onde?
Page 8: Testando Aplicações Django: Quando, Como e Onde?

Testes não são garantias

Page 9: Testando Aplicações Django: Quando, Como e Onde?

Testes não são garantias,mas são excelentes

indicadores

Page 10: Testando Aplicações Django: Quando, Como e Onde?

Por que falarsobre testes?

Page 11: Testando Aplicações Django: Quando, Como e Onde?

Só escrever testesnão basta

Page 12: Testando Aplicações Django: Quando, Como e Onde?

Teste também é código!

Page 13: Testando Aplicações Django: Quando, Como e Onde?

I'm watching!

Page 14: Testando Aplicações Django: Quando, Como e Onde?

Código deve serfácil de ler.

Page 15: Testando Aplicações Django: Quando, Como e Onde?

Código deve serfácil de ler.

Testes também!

Page 16: Testando Aplicações Django: Quando, Como e Onde?

Código deve serfácil de entender.

Page 17: Testando Aplicações Django: Quando, Como e Onde?

Código deve serfácil de entender.

Testes também!

Page 18: Testando Aplicações Django: Quando, Como e Onde?

Código deve serfácil de manter.

Page 19: Testando Aplicações Django: Quando, Como e Onde?

Código deve serfácil de manter.

Testes também!

Page 20: Testando Aplicações Django: Quando, Como e Onde?

#NOT

Page 21: Testando Aplicações Django: Quando, Como e Onde?

E dá para escrever bons testes no Django?

Page 22: Testando Aplicações Django: Quando, Como e Onde?

E dá para escrever bons testes no Django?

Page 23: Testando Aplicações Django: Quando, Como e Onde?

Recursos do Django

● Views● Templates● Forms● Models● Signals● Template tags● Template filters● Settings● ...

Page 24: Testando Aplicações Django: Quando, Como e Onde?

Como começar a testar?

Page 25: Testando Aplicações Django: Quando, Como e Onde?

python manage.py startapp core

Page 26: Testando Aplicações Django: Quando, Como e Onde?

TUDO NUM ARQUIVO .PYSÓ!?!?! #WTF!!!

Page 27: Testando Aplicações Django: Quando, Como e Onde?

Organize seus testes

Page 28: Testando Aplicações Django: Quando, Como e Onde?

Test as Packages

Page 29: Testando Aplicações Django: Quando, Como e Onde?

Test as Packages

Page 30: Testando Aplicações Django: Quando, Como e Onde?

Test as Packages

__init__.py:

Page 31: Testando Aplicações Django: Quando, Como e Onde?

Explícito é melhorque implícito e

evita ambiguidades

Page 32: Testando Aplicações Django: Quando, Como e Onde?

Testando o tripé do Django

● Views● Forms● Models

Page 33: Testando Aplicações Django: Quando, Como e Onde?

Views – O que testar?● Em 99% dos casos:

● Status code da resposta● Template utilizado● Contexto da resposta● Persistência no banco de dados

● Em alguns outros casos:● Envio de e-mails● Conteúdo da resposta● Disparo de sinais● Conexões com APIs externas

Page 34: Testando Aplicações Django: Quando, Como e Onde?

Views – Como testar?

Django TestClient:

● get(path, data={}, follow=False, **extra)● post(path, data={}, content_type=MULTIPART_CONTENT, follow=False, **extra)

● put(path, data={}, content_type=MULTIPART_CONTENT, follow=False, **extra)

● delete(path, follow=False, **extra)● ...● login(**credentials)● logout()

Page 35: Testando Aplicações Django: Quando, Como e Onde?

Testando uma view básica

Page 36: Testando Aplicações Django: Quando, Como e Onde?

Mais complexidade com email

Page 37: Testando Aplicações Django: Quando, Como e Onde?

Mais complexidade com conteúdo da resposta

Page 38: Testando Aplicações Django: Quando, Como e Onde?

Testando uma view do admin

Page 39: Testando Aplicações Django: Quando, Como e Onde?

Forms – O que testar?

● Validação do formulário● Geral● Por campo

● Comportamento dos campos● Ex: atributo choice do ModelChoiceField

● Comportamento do domínio do form● Ex: método save sobreescrito

Page 40: Testando Aplicações Django: Quando, Como e Onde?

Forms – Como testar?

● Instanciar um objeto da classe do form com um dicionário de strings com os dados sendo passado por parâmetro

Page 41: Testando Aplicações Django: Quando, Como e Onde?

Forms – Code Snippet

Page 42: Testando Aplicações Django: Quando, Como e Onde?

Models – O que testar?

● Validação do modelo● Métodos adicionados ao modelo● Estados da queryset● Cuidado para não testar o Django

Page 43: Testando Aplicações Django: Quando, Como e Onde?

Models – Como testar?

● Instanciação de objetos daquele modelo normalmente e asserções através da API daquele objeto;

Page 44: Testando Aplicações Django: Quando, Como e Onde?

Models - Snippet

Page 45: Testando Aplicações Django: Quando, Como e Onde?

Sagacidades com testes!

Estude TODO o pacote django.test

https://docs.djangoproject.com/en/dev/intro/tutorial05/https://docs.djangoproject.com/en/dev/topics/testing/advanced/

Page 46: Testando Aplicações Django: Quando, Como e Onde?

Sagacidades com testes!

Use os asserts que o Django já te fornece.

Page 47: Testando Aplicações Django: Quando, Como e Onde?

Sagacidades com testes!

Extenda o TestCase do Django adicionando novos métodos de testes.

Mas cuidado para não fazer #tudojuntoemisturado!

Page 48: Testando Aplicações Django: Quando, Como e Onde?

Sagacidades com testes!

Page 49: Testando Aplicações Django: Quando, Como e Onde?

Sagacidades com testes!

Utilize o mock para simular comportamentos externos.

http://www.voidspace.org.uk/python/mock/

Page 50: Testando Aplicações Django: Quando, Como e Onde?

Sagacidades com testes!

Page 51: Testando Aplicações Django: Quando, Como e Onde?

Sagacidades com testes!

Pré-popule seu banco utilizando o model_mommy.

http://github.com/vandersonmota/model_mommy/

Page 52: Testando Aplicações Django: Quando, Como e Onde?

Sagacidades para escrever testes!

Page 53: Testando Aplicações Django: Quando, Como e Onde?

Sagacidades com testes!

Substitua o TestRunnerdo Django pelo Nose.

http://code.google.com/p/python/python-nose/

Page 54: Testando Aplicações Django: Quando, Como e Onde?

Ainda faltou testarmos

● Signals● Template filters● Template tags● Settings● Management commands● ModelAdmin● Forms widgets● ...

Page 55: Testando Aplicações Django: Quando, Como e Onde?

Obrigado!

Page 56: Testando Aplicações Django: Quando, Como e Onde?

Perguntas?