Do nada, tudo se constrói
Sobre Testes, TDD, pytest, ...
Andre Pastore • TDC Florianópolis 2018
Agenda
● Testes
● Esvaziando o Cheio
● Desenvolvimento Orientado a Testes (TDD)
● pytest
● pytest plugins: pytest-watch & pytest-cov
● Tornado
● @pytest.fixture
● pytest-tornado
● @pytest.mark.parametrize
“Testing is a process of executing a
program with the intent to find errors.”
Myers, G. J., Corey S., Badgett, T.,
The Art of Software Testing
Testes de Software
Um processo ou uma série de processos para verificar:
● O código do programa faz o esperado?
● Somente o esperado?
solutions
Caso de Estudo
Conversor de Moedas entre Real (R$) e Dólar (US$)
(Cotação US$ 1 = R$ 2,00)
Perguntas para testes:
Convertendo US$ 1.00 para R$, resulta em R$ 2,00?
Convertendo R$ 1,00 para US$, resulta em US$ 0.50?
Isto pode ser simples.
Ou tão complicado quanto quisermos.
Esvaziando o Cheio
Desenvolvimento Guiado por Testes (TDD)
NadaTudo
Imagem extraída de: http://haselt.com/coding-dojo-with-tdd/,
Vamos escrever um teste com assert
“helps you write better programs”
Lembrem-me
dos adesivos
Pytest: Convenções de Nomes
Arquivos test_*.py
Dentro dos arquivos, funções ou métodos test_*
Primeiro teste com pytest
pytest-cov
pytest-pep8
pytest-watch
pytest-django
pytest-tornado
pytest-selenium
pytest-pylin
t
pytest-sugar
pytest-flask
400+
pytest-profiling
pytest-*: plugins
pytest-watch
Refatorando
Colocando na web com Tornado
@pytest.fixture
def test_list_of_users():
conn = DatabaseConnection()
assert 10 == len(conn.query_list(“SELECT * FROM users”))
conn.close()
def test_list_of_houses():
conn = DatabaseConnection()
assert 1 == len(conn.query_list(“SELECT * FROM houses”))
conn.close()
import pytest
@pytest.fixture
def conn():
conn = DatabaseConnection()
yield conn
conn.close()
def test_list_of_users(conn):
assert 10 == len(conn.query_list(“SELECT * FROM users”))
def test_list_of_houses(conn):
assert 1 == len(conn.query_list(“SELECT * FROM houses”))
Pytest . facts
Some pytest built-in arguments
-lf, --last-failed
reexecuta apenas os últimos testes que falharama
-v[v], --verbose
imprime mais detalhes dos testes
-x
interrompe os testes logo no primeiro erro
--pdb
habilita um breakpoint na linha em que ocorrer um erro
Recomendação: Acostume-se a escrever testes
Recomendação: Use pytest
Convite: Se puder, contribua com o pytest
Ah! Esvazie.
Agradecimentos Especiais
Monalisa Mello, Poline Lottin e Rodolfo Lottin. Trilha TDC
Holger Krekel, Bruno Oliveira and others: Core Developers do pytest
Danilo Bellini, ajudou a construir idéias para a apresentação
A toda a comunidade Python Floripa
Giovanni Piazza, Felipe Felisberto designers do sticker do Elias
Elias Dorneles, a pessoa no sticker!
Referências
https://pytest.org
https://github.com/apast/tutorial-pytest-tornado
Test Driven Development. By Example
K. Beck. Addison-Wesley Longman, Amsterdam, (2002)
The Art of Software Testing
G. Myers. Wiley, 2 edition, (2004)
Obrigado!
Contatos
André Pastore
/apast
}

TDC2018FLN | Trilha Python - Do nada, tudo se constrói. Test-Driven Development ao vivo