SlideShare ist ein Scribd-Unternehmen logo
1 von 56
Downloaden Sie, um offline zu lesen
Testando Aplicações Django



     Como? Quando? Onde?



        Bernardo Fontes
           @bbfontes
@bbfontes – bernardofontes.net – falecomigo@bernardofontes.net
Por que testar?
Testes não são garantias
Testes não são garantias,
   mas são excelentes
      indicadores
Por que falar
sobre testes?
Só escrever testes
    não basta
Teste também é código!
I'm watching !
Código deve ser
 fácil de ler.
Código deve ser
 fácil de ler.

Testes também!
Código deve ser
fácil de entender.
Código deve ser
fácil de entender.

 Testes também!
Código deve ser
fácil de manter.
Código deve ser
fácil de manter.

Testes também!
#NOT
E dá para escrever bons
   testes no Django?
E dá para escrever bons
   testes no Django?
Recursos do Django
●   Views
●   Templates
●   Forms
●   Models
●   Signals
●   Template tags
●   Template filters
●   Settings
●   ...
Como começar a testar?
python manage.py startapp core
TUDO NUM ARQUIVO .PY
   SÓ!?!?! #WTF!!!
Organize seus testes
Test as Packages
Test as Packages
Test as Packages


    __init__.py:
Explícito é melhor
  que implícito e
evita ambiguidades
Testando o tripé do Django
●   Views
●   Forms
●   Models
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
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()
Testando uma view básica
Mais complexidade com email
Mais complexidade com
conteúdo da resposta
Testando uma view do admin
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
Forms – Como testar?
●   Instanciar um objeto da classe do
    form com um dicionário de strings
    com os dados sendo passado por
    parâmetro
Forms – Code Snippet
Models – O que testar?

●   Validação do modelo
●   Métodos adicionados ao modelo
●   Estados da queryset
●   Cuidado para não testar o Django
Models – Como testar?
●   Instanciação de objetos daquele
    modelo normalmente e asserções
    através da API daquele objeto;
Models - Snippet
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/
Sagacidades com testes!



Use os asserts que o Django já te
             fornece.
Sagacidades com testes!


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

    Mas cuidado para não fazer
       #tudojuntoemisturado!
Sagacidades com testes!
Sagacidades com testes!



            Utilize o mock para simular
              comportamentos externos.




http://www.voidspace.org.uk/python/mock/
Sagacidades com testes!
Sagacidades com testes!



    Pré-popule seu banco utilizando o
               model_mommy.




http://github.com/vandersonmota/model_mommy/
Sagacidades para escrever testes!
Sagacidades com testes!



                  Substitua o TestRunner
                   do Django pelo Nose.




http://code.google.com/p/python/python-nose/
Ainda faltou testarmos
●   Signals
●   Template filters
●   Template tags
●   Settings
●   Management commands
●   ModelAdmin
●   Forms widgets
●   ...
Obrigado!
Perguntas?

Weitere ähnliche Inhalte

Was ist angesagt?

Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
PHP Day Curitiba
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
elliando dias
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
Thiago Ghisi
 
Django Object factory
Django Object factoryDjango Object factory
Django Object factory
italomaia
 

Was ist angesagt? (20)

Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnit
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
 
Desenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com JunitDesenvolvimento Dirigido por Testes com Junit
Desenvolvimento Dirigido por Testes com Junit
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
 
Junit 4.0
Junit 4.0Junit 4.0
Junit 4.0
 
Junit
JunitJunit
Junit
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de Software
 
Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
Introdução a testes unitários com jUnit
Introdução a testes unitários com jUnitIntrodução a testes unitários com jUnit
Introdução a testes unitários com jUnit
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de código
 
Django Object factory
Django Object factoryDjango Object factory
Django Object factory
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de código
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot framework
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
Por que automatizar testes de software?
Por que automatizar testes de software?Por que automatizar testes de software?
Por que automatizar testes de software?
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016
 

Ähnlich wie Testando Aplicações Django: Quando, Como e Onde?

Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
Igor Sobreira
 
Test é para os fracos
Test é para os fracosTest é para os fracos
Test é para os fracos
Thiago Avelino
 
Boas Práticas de Programação
Boas Práticas de ProgramaçãoBoas Práticas de Programação
Boas Práticas de Programação
COTIC-PROEG (UFPA)
 

Ähnlich wie Testando Aplicações Django: Quando, Como e Onde? (20)

In tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e maisIn tests we trust: começando com TDD, mocks e mais
In tests we trust: começando com TDD, mocks e mais
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
Importância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOpsImportância de Testes Automatizados para Continuous Delivery & DevOps
Importância de Testes Automatizados para Continuous Delivery & DevOps
 
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
Samanta Cicilia - MTC - Importância de Testes Automatizados para Continuous D...
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
Treinamento Testes Unitários - parte 2
Treinamento Testes Unitários - parte 2Treinamento Testes Unitários - parte 2
Treinamento Testes Unitários - parte 2
 
Testes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração seguraTestes com python: como fazer uma refatoração segura
Testes com python: como fazer uma refatoração segura
 
TDC 2014 POA - Clean Code para Testers
TDC 2014 POA - Clean Code para TestersTDC 2014 POA - Clean Code para Testers
TDC 2014 POA - Clean Code para Testers
 
Test é para os fracos
Test é para os fracosTest é para os fracos
Test é para os fracos
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016
 
Boas Práticas de Programação
Boas Práticas de ProgramaçãoBoas Práticas de Programação
Boas Práticas de Programação
 
Boas Práticas de Programação
Boas Práticas de ProgramaçãoBoas Práticas de Programação
Boas Práticas de Programação
 
AppTesting
AppTestingAppTesting
AppTesting
 
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
O que seus testes garantem, o funcionamento do código ou das funcionalidades ...
 
Como aumentar a eficiência dos seus testes manuais
Como aumentar a eficiência dos seus testes manuaisComo aumentar a eficiência dos seus testes manuais
Como aumentar a eficiência dos seus testes manuais
 
Testes: existe vida antes do TDD
Testes: existe vida antes do TDDTestes: existe vida antes do TDD
Testes: existe vida antes do TDD
 
Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
 

Mehr von Bernardo Fontes (6)

Tdd Com Mock e Orientação a Objetos (PyNE 2015)
Tdd Com Mock e Orientação a Objetos (PyNE 2015)Tdd Com Mock e Orientação a Objetos (PyNE 2015)
Tdd Com Mock e Orientação a Objetos (PyNE 2015)
 
Melhorando Testes No Django Com O Model Mommy
Melhorando Testes No Django Com O Model MommyMelhorando Testes No Django Com O Model Mommy
Melhorando Testes No Django Com O Model Mommy
 
Crawleando a web feito gente grande com o scrapy
Crawleando a web feito gente grande com o scrapyCrawleando a web feito gente grande com o scrapy
Crawleando a web feito gente grande com o scrapy
 
Aprenda a programar direito: pergunte-me como ii
Aprenda a programar direito:  pergunte-me como iiAprenda a programar direito:  pergunte-me como ii
Aprenda a programar direito: pergunte-me como ii
 
Django: um framework web para perfeccionistas com prazo
Django: um framework web para perfeccionistas com prazoDjango: um framework web para perfeccionistas com prazo
Django: um framework web para perfeccionistas com prazo
 
ForkinRio
ForkinRioForkinRio
ForkinRio
 

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