Módulo 13 - Testes avançados
pytest: o teste que só usa assert
9 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Escrever um teste como uma função test_ com assert.
- Rodar a suíte com o comando pytest e ler o resultado.
- Interpretar o relatório de uma falha, com o assert que quebrou.
- Organizar os testes em arquivos test_*.py.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: pytest: o teste que só usa assert.
Os objetivos desta aula. Escrever um teste como uma função test_ com assert. Rodar a suíte com o comando pytest e ler o resultado. Interpretar o relatório de uma falha, com o assert que quebrou. Organizar os testes em arquivos test_*.py.
Veja o essencial, parte por parte.
Seu primeiro teste com pytest. No pytest, um teste é uma função com nome começando em test_ que usa assert.
Rodar a suíte e ler o relatório. pytest -v mostra o nome de cada teste, um por linha, em vez de só pontos.
Por que testar assim vale a pena. A diferença em relação a um assert solto no meio do programa é grande.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
Seu primeiro teste com pytest
A grande sacada do pytest é a simplicidade. Você não precisa herdar de classe nenhuma nem aprender métodos especiais de comparação. Um teste é apenas uma função cujo nome começa com test_, e a verificação é feita com a instrução assert que você já conhece. Se a expressão do assert é verdadeira, o teste passa em silêncio; se é falsa, o teste falha e o pytest mostra em detalhe o que deu errado. Essa leveza é o que fez o pytest virar o padrão da comunidade.
# arquivo: calculadora.py
def somar(a, b):
return a + b
def dividir(a, b):
return a / b
# arquivo: test_calculadora.py
from calculadora import somar, dividir
def test_somar_positivos():
assert somar(2, 3) == 5
def test_somar_com_zero():
assert somar(7, 0) == 7
def test_dividir():
assert dividir(10, 2) == 5.0Cada função test_ verifica um comportamento com assert. Nada de herança ou setup.
Repare na organização, que também é convenção. O código de produção fica em calculadora.py, e os testes em test_calculadora.py. Essa separação mantém o teste perto do que ele verifica, sem misturar. Cada função de teste checa um comportamento único e tem um nome que descreve o que está sendo verificado, como test_somar_com_zero. Nomes claros valem ouro: quando um teste falha, o próprio nome já sugere o que quebrou, antes mesmo de você ler o corpo.
Rodar a suíte e ler o relatório
Para rodar, basta o comando pytest no terminal, na pasta do projeto. Ele procura sozinho os arquivos test_*.py, encontra as funções test_ dentro deles e executa cada uma. No fim, mostra um resumo: um ponto verde por teste que passou, um F por falha, e a contagem total. Quando tudo passa, você vê uma linha tranquilizadora em verde. Quando algo falha, o pytest não esconde: ele mostra exatamente qual assert quebrou e com quais valores, o que muda tudo na hora de corrigir.
# No terminal, na pasta do projeto:
# pip install pytest
# pytest
#
# Saida quando tudo passa (resumida):
# test_calculadora.py ... [100%]
# 3 passed in 0.01s
#
# Se test_dividir esperasse o valor errado, o pytest mostraria:
# E assert 5.0 == 4.0
# E + where 5.0 = dividir(10, 2)
# ou seja: o valor obtido, o esperado e de onde veio.O comando pytest descobre e roda os testes; a falha mostra obtido, esperado e origem.
Por que testar assim vale a pena
assert solto no código
- Espalhado no meio do programa, roda junto
- Some quando você limpa o código
- Não há relatório nem contagem
- Difícil de rodar tudo de uma vez
Teste com pytest
- Isolado em arquivos test_*.py dedicados
- Fica no projeto e roda quando você quiser
- Relatório claro do que passou e falhou
- Uma suíte inteira em um comando
A diferença em relação a um assert solto no meio do programa é grande. O teste com pytest vive separado, roda sob demanda, se acumula em uma suíte e produz um relatório. Isso muda a forma como você trabalha. Depois de mexer no código, um comando confirma que você não quebrou nada do que já funcionava. Essa rede de segurança é o que permite refatorar sem medo, evoluir o programa com confiança e pegar regressões no instante em que elas aparecem, e não semanas depois, em produção, com o usuário reclamando.
Vale começar simples e crescer. Um projeto novo pode ter meia dúzia de testes cobrindo os caminhos principais e alguns casos de borda. À medida que ele amadurece, a suíte cresce com ele, e cada bug corrigido vira um teste que impede aquele bug de voltar. As próximas aulas mostram como o pytest sustenta suítes grandes com elegância: fixtures para preparar o cenário, parametrize para cobrir muitos casos sem repetição, e recursos para testar erros e dependências externas.
Teste rápido
No pytest, o que caracteriza uma função de teste?
Perguntas frequentes
- Preciso instalar o pytest para usá-lo?
- Sim. Diferente do módulo unittest, que vem embutido, o pytest é um pacote externo, instalado com pip install pytest, como você aprendeu no Intermediário. É rápido, e o ganho em legibilidade e recursos compensa de sobra. No Playground do curso você pode acompanhar a lógica; no computador, roda a suíte de verdade.
- Qual a diferença entre pytest e o módulo unittest?
- O unittest é o framework embutido, mais verboso, que exige herdar de TestCase e usar métodos como assertEqual. O pytest usa funções simples com assert comum e traz relatórios melhores, fixtures e parametrização. Ambos servem; o pytest é o mais usado hoje pela clareza.
- Onde devo colocar os arquivos de teste?
- A convenção é nomeá-los test_*.py ou *_test.py, o que o pytest descobre automaticamente. Muitos projetos guardam os testes numa pasta tests separada, ao lado do código. O importante é seguir o padrão de nomes para o pytest encontrá-los sem configuração extra.
- Por que usar assert simples é uma vantagem?
- Porque você usa a mesma instrução da linguagem que já conhece, sem decorar dezenas de métodos de comparação. O pytest reescreve o assert por baixo para, quando ele falha, mostrar os valores dos dois lados. Você ganha relatórios ricos com a sintaxe mais simples possível.
- Um teste deve verificar quantas coisas?
- Idealmente um comportamento por teste. Um teste focado, com um ou poucos asserts sobre a mesma ideia, deixa claro o que quebrou quando ele falha. Testes que verificam muitas coisas distintas de uma vez dificultam entender a causa e costumam ser um sinal de que vale dividir.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.