Escrevendo seus primeiros testes com pytest
Entenda a descoberta de testes, as instruções assert e a estrutura dos testes.
Escrevendo seus primeiros testes com pytest é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.
Instalando o pytest
Instale pytest com pip. Ele não exige configuração obrigatória — descobre testes automaticamente.
# pip install pytest
# Run all tests
# pytest
# Run a specific file
# pytest test_math.pyUma função de teste simples
pytest coleta qualquer função que comece com test_. Use instruções assert comuns — pytest as reescreve para gerar uma saída detalhada.
# test_math.py
def add(a, b):
return a + b
def test_add():
assert add(2, 3) == 5
def test_add_negative():
assert add(-1, 1) == 0Arquivos e descoberta de testes
pytest descobre arquivos de teste nomeados como test_*.py ou *_test.py e coleta funções nomeadas como test_* ou classes nomeadas como Test*.
tests/
test_utils.py
test_models.py
conftest.py # shared fixturesAgrupando testes em classes
Agrupe testes relacionados em uma classe com o prefixo Test. Não é necessário usar unittest.TestCase.
class TestCalculator:
def test_add(self):
assert 1 + 1 == 2
def test_multiply(self):
assert 3 * 4 == 12Testando exceções
Use pytest.raises como um gerenciador de contexto para afirmar que exceções específicas são geradas.
import pytest
def divide(a, b):
if b == 0:
raise ZeroDivisionError("cannot divide by zero")
return a / b
def test_divide_by_zero():
with pytest.raises(ZeroDivisionError, match="cannot divide"):
divide(10, 0)A opção -v
Execute pytest com -v (detalhado) para ver o nome de cada teste e seu estado de aprovação ou falha.
# pytest -v
# test_math.py::test_add PASSED
# test_math.py::test_add_negative PASSED
# Show print output too:
# pytest -v -sIgnorando testes
Use @pytest.mark.skip ou @pytest.mark.skipif para ignorar testes condicionalmente.
import pytest, sys
@pytest.mark.skip(reason="not implemented yet")
def test_future_feature():
assert False
@pytest.mark.skipif(sys.platform == "win32", reason="Unix only")
def test_unix_only():
assert TrueMarcando testes como falhas esperadas
@pytest.mark.xfail marca um teste que se espera que falhe. Ele é aprovado se falhar e gera um aviso se for aprovado inesperadamente.
import pytest
@pytest.mark.xfail(reason="known bug #42")
def test_buggy():
assert 1 == 2 # will fail, but that's expectedReescrita de assert
pytest reescreve as instruções assert para mostrar os valores que causaram uma falha — muito mais útil do que um AssertionError simples.
def test_list_equal():
result = [1, 2, 4]
expected = [1, 2, 3]
assert result == expected
# AssertionError:
# assert [1, 2, 4] == [1, 2, 3]
# At index 2 diff: 4 != 3conftest.py
conftest.py é carregado automaticamente pelo pytest. Coloque aqui fixtures e plug-ins compartilhados sem importá-los explicitamente.
# conftest.py
import pytest
@pytest.fixture
def sample_data():
return {"key": "value"}
# Any test file in the same dir can use sample_data as a parameterExecutando subconjuntos de testes
Use -k para executar testes que correspondam a uma expressão de palavra-chave.
# Run tests containing "add"
# pytest -k "add"
# Run tests NOT containing "slow"
# pytest -k "not slow"
# Run a specific test
# pytest test_math.py::test_addVerificação rápida
Com qual prefixo o nome de uma função de teste do pytest deve começar para ser descoberta automaticamente?
Recapitulação
pytest não exige código auxiliar: nomeie os arquivos como test_*.py, as funções como test_* e use assert comum. Use pytest.raises para exceções, -v para obter mais detalhes e conftest.py para fixtures compartilhados.
Perguntas Frequentes
A aula “Escrevendo seus primeiros testes com pytest” é grátis?
Sim — o texto completo de “Escrevendo seus primeiros testes com pytest” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.
O que vou aprender em “Escrevendo seus primeiros testes com pytest”?
Entenda a descoberta de testes, as instruções assert e a estrutura dos testes. Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Python Academy?
Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Escrevendo seus primeiros testes com pytest”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Python Academy?
Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Escrevendo seus primeiros testes com pytest
- Fixtures e configuração/desmontagem
- Parametrização e cobertura de testes
- Simulação com unittest.mock