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

Velocidade

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.

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.0

Cada 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.