TDD com Django – Parte 1

Livro Test Driven Developement with Python

Testes são muito importantes no desenvolvimento de sistemas e/ou websites. Pensando nisso e baseado no livro Test-Driven Developement with Python de Harry Percival (disponível para compra ou leitura gratuita online em http://www.obeythetestinggoat.com/) resolvi fazer uma série de artigos sobre introdução a testes com Python e Django. Essa série também se baseia em minhas notas do Hands-On que dei para a MeetUp do grupo Rede Neural, em Caxias do Sul.

Iniciando o projeto

Seguiremos o projeto de uma lista de tarefas simples, conforme descrito no livro mencionado anteriormente. Fiz algumas adaptações, utilizando o português para os comentários e nomes de classes de testes. O objetivo disso é a didática. Em desenvolvimento profissional, sempre use o inglês como língua para classes, atributos ou mesmo comentários.

Índice

  1. Configurações iniciais e Etapa 1. 02/07/18;
  2. Etapa 2 – Testes Funcionais e História do Usuário. Previsto;
  3. Etapa 3 – Testes Funcionais com Classes. Previsto;
  4. Etapa 4 – Do teste funcional para a aplicação. Previsto;
  5. Etapa 5 – Testes unitários. Previsto;
  6. Etapa 6 – Do teste unitário para a aplicação. Previsto;

Git

O projeto encontra-se no GitHub. Cada post é composto por 1 etapa. Cada etapa corresponde a uma branch no repositório do GitHub. Você pode acessar o repositório através do seguinte link: https://github.com/WilliamZimmermann/tdd-python

Configurando o ambiente

Se você desejar acompanhar na prática o TDD com Python e Django, recomendo:

Passo 1 – Instalação do Python

Baixe o arquivo de instalação do Python 3.7.*, se você ainda não tiver. Você pode baixar diretamente do site oficial:

Instalação do Geckodriver

O Geckodriver é uma ferramenta de automação de testes. Ao executar os testes, através do Geckodriver será executado seu Firefox. Baixe o Geckodriver aqui: https://github.com/mozilla/geckodriver/releases

Após, mova o arquivo interno para:

No Windows Mesmo caminho onde estará o código do projeto

No Mac ou Linux

sudo mv /Users/myuser/Downloads/geckodriver /usr/local/bin

Passo 2 – Ambiente virtual

O ambiente virtual é um ambiente onde os requisitos do seu projeto estarão instaldos. Com isso, você não precisará alterar suas configurações do Python globais toda vez que seu projeto for alterado – precisará alterar somente as configurações desse ambiente virtual.

Crie uma pasta onde você colocará seu projeto. Vamos chamá-lo de tddpy. Para fazer isso, abra seu Terminal (ou PowerShell no Windows). Digite:

No Windows

$ cd myuser
$ mkdir tddpy
$ cd tddpy
$ py -3.7 -m venv virtualenv

No Linux ou Mac

$ cd myuser
$ mkdir tddpy
$ cd tddpy
$ python3 -m venv virtualenv

Durante o projeto, ativaremos e desativaremos o ambiente virtual. Para fazer isso, digite (você deve estar dentro do diretório tddpy):

No Windows

source virtualenv/Scripts/activate
deactivate

No Linux ou Mac

source virtualenv/bin/activate
deactivate

Passo 3 – Instalação do Django e do Selenium

Abra seu terminal (console) e, estando com o ambiente virtual ativado, digite:

(virtualenv) $ pip install "django" "selenium<4"
Collecting django....
Installing collected packages: pytz, django, selenium
Successfully installed django-2.0.6 pytz-2018.4 selenium-3.13.0

Iniciando

  1. Usando o terminal ou promt de comando, crie um diretório onde você colocará seu projeto. Sugiro o nome de tddtutorial (para criar um diretório, digite mkdir nomedodiretorio);
  2. Ir para diretório do projeto (cd nomedodiretorio);
  3. Digite: pip install “django” “selenium<4”. Isso fará com que o Django e o Selenium sejam instalados.

Etapa 1 – Teste funcional (branch etapa/1)

  1. Dentro do diretório, crie um arquivo chamado functional_tests.py. Digite dentro dele:

from selenium import webdriver

browser = webdriver.Firefox()

browser.get(‘http://localhost:8000’)

assert ‘Django’ in browser.title

      3. Rode o teste:

python functional_tests.py

Vai dar erro! Isso é bom! O erro aconteceu porque o servidor do Django não foi iniciado. Sendo assim, ele não conseguiu encontrar o título.

      4. Inicie o servidor do Django:

python manage.py runserver

      5. Rode o teste novamente:

python functional_tests.py

Agora tudo deve ter dado certo! Nenhum erro foi exibido no terminal.

Você já deve ter percebido que Testes seguem um ciclo:

  • Você escreve antes de mais nada o Teste;
  • Roda o Teste esperando um Erro;
  • Escreve o código a fim de não dar erro;
  • Se o teste passar, escreve outro teste e reinicia o ciclo.

No próximo post, veremos um pouco mais sobre testes funcionais e dicas de como escrevê-los, seguindo o nosso projeto. Ficou com dúvidas, poste aqui em baixo nos comentários. Até a próxima!

Seus comentários são muito apreciados.

This site uses Akismet to reduce spam. Learn how your comment data is processed.