Módulo 15 - Testes automatizados

Conhecendo o pytest

10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026

O que você vai aprender

  • Entender que o pytest é um pacote externo, instalado com pip.
  • Escrever testes como funções test_ usando assert direto.
  • Comparar o estilo do pytest com o do unittest.
  • Rodar os testes com o comando pytest e ler o resultado.

O pytest é um pacote externo

Diferente do unittest, o pytest não faz parte da biblioteca padrão. Ele é um pacote externo, e você o instala com o pip, de preferência dentro de um ambiente virtual, como o curso mostrou no módulo de pacotes. O comando é pip install pytest. Vale o esforço porque o pytest é, de longe, a ferramenta de testes mais usada na comunidade Python profissional, e o motivo principal é a simplicidade: ele deixa você escrever testes com muito menos cerimônia.

# No terminal, dentro do ambiente virtual do projeto:
pip install pytest

# Depois, para rodar todos os testes da pasta:
pytest
# O pytest descobre sozinho os arquivos test_*.py
# e as funcoes test_* dentro deles.

Instalação com pip e execução com o comando pytest, sem configurar nada.

A grande diferença aparece na hora de escrever o teste. No unittest, você precisa de uma classe que herda de TestCase e chama métodos como self.assertEqual. No pytest, um teste é apenas uma função com nome começando em test_, e dentro dela você usa o mesmo assert que aprendeu no começo do módulo. Nada de classe, nada de self, nada de métodos especiais para cada tipo de comparação. Menos peças para lembrar, mais foco no que interessa.

Escrevendo testes com pytest

Veja o mesmo conjunto de testes da aula anterior, agora no estilo pytest. Salve como test_dobro.py e rode pytest na pasta. Compare a quantidade de código com a versão em unittest: é a mesma verificação, com menos estrutura ao redor.

def dobro(n):
    return n * 2


def test_positivo():
    assert dobro(5) == 10


def test_zero():
    assert dobro(0) == 0


def test_negativo():
    assert dobro(-3) == -6

No pytest, cada teste é uma função test_ com o assert nativo. Sem classe, sem self.

Ao rodar pytest, ele encontra sozinho os arquivos que começam com test_ e as funções test_ dentro deles, executa cada uma e mostra um resumo colorido: quantos passaram e quantos falharam. O detalhe que conquista muita gente é o que acontece quando um assert falha. O pytest reescreve o assert por trás dos panos para mostrar os valores envolvidos, então mesmo sem você escrever mensagem alguma, o relatório informa exatamente o que veio e o que se esperava.

# Com dobro quebrado (n + 2), rodando pytest:
# Saida (resumida):
#     def test_positivo():
# >       assert dobro(5) == 10
# E       assert 7 == 10
# E        +  where 7 = dobro(5)
#
# 1 failed, 2 passed

O pytest mostra a linha, o valor obtido (7) e de onde ele veio, sem mensagem manual.

Fechando a comparação

Os dois caminhos levam ao mesmo lugar: código coberto por testes que rodam sozinhos. O unittest tem a vantagem de já estar instalado, o que é ótimo para um script simples ou um ambiente onde você não quer depender de pip. O pytest pede a instalação, mas paga com testes mais curtos, um assert que basta por si só e mensagens de falha muito claras, além de recursos avançados que você vai encontrar quando os projetos crescerem. Na prática, boa parte do mundo Python profissional usa pytest, e como ele também executa testes escritos no estilo unittest, você não fica preso a uma escolha. Conhecer os dois deixa você confortável em qualquer projeto que encontrar.

Teste rápido

Qual afirmação sobre o pytest está correta?

Perguntas frequentes

Preciso escolher entre unittest e pytest?
Não em definitivo. O unittest já vem com o Python e é ótimo quando você não quer depender de instalação. O pytest é externo, mais simples de escrever e com relatórios melhores. Como o pytest também roda testes escritos em unittest, dá para começar com um e migrar aos poucos.
Como instalo o pytest?
Com o pip, de preferência dentro de um ambiente virtual do projeto, como o curso ensinou no módulo de pacotes: pip install pytest. Depois, basta digitar pytest na pasta do projeto que ele descobre e roda todos os arquivos test_ automaticamente.
No pytest eu uso assertEqual ou assert?
Você usa o assert nativo, o mesmo do começo do módulo, por exemplo assert dobro(5) == 10. O pytest reescreve esse assert por trás dos panos para, quando ele falha, mostrar os valores envolvidos. Não é preciso self.assertEqual nem escrever mensagem à mão.
Por que tanta gente prefere o pytest?
Pela simplicidade e pela clareza dos relatórios. Testes viram funções curtas com assert direto, sem classe nem métodos especiais, e quando um falha o pytest mostra sozinho o valor obtido e de onde ele veio. Em projetos maiores, ele ainda oferece recursos avançados que economizam código.
O pytest descobre os testes sozinho?
Sim. Ao rodar o comando pytest, ele procura arquivos que começam com test_ (ou terminam em _test) e, dentro deles, funções que começam com test_. Executa cada uma e resume quantas passaram e quantas falharam, sem você precisar listar nada manualmente.
Posso usar pytest em testes que já escrevi com unittest?
Pode. O pytest também executa classes que herdam de unittest.TestCase, então ele roda a suíte antiga sem alteração. Isso permite adotar o pytest em um projeto que já tem testes em unittest e ir escrevendo os novos no estilo mais enxuto, sem reescrever tudo.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.