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
- Configurações iniciais e Etapa 1. 02/07/18;
- Etapa 2 – Testes Funcionais e História do Usuário. Previsto;
- Etapa 3 – Testes Funcionais com Classes. Previsto;
- Etapa 4 – Do teste funcional para a aplicação. Previsto;
- Etapa 5 – Testes unitários. Previsto;
- 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:
- Que instale o Python (veja o próximo tópico);
- Que instale alguma IDE de desenvolvimento. Eu usarei o PyCharm (https://www.jetbrains.com/pycharm/) que também possui uma versão free para a comunidade. Outra excelente opção é o Visual Studio Code (VS Code, https://code.visualstudio.com) que também possui algumas extensões muito boas para Python;
- Que baixe o Firefox (https://www.mozilla.org/firefox/);
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:
- Para MacOSX: https://www.python.org/ftp/python/3.7.0/python-3.7.0-macosx10.9.pkg
- Para Windows 64bits: https://www.python.org/ftp/python/3.7.0/python-3.7.0.exe
- Para Linux: versões mais recentes já tem o Python instalado por padrão. Se não tiver, dê um apt install python3.6-venv.
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
- 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);
- Ir para diretório do projeto (cd nomedodiretorio);
- Digite: pip install “django” “selenium<4”. Isso fará com que o Django e o Selenium sejam instalados.
Etapa 1 – Teste funcional (branch etapa/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!