0Pricing
Python Academy · Aula

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

Uma 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) == 0

Arquivos 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 fixtures

Agrupando 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 == 12

Testando 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 -s

Ignorando 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 True

Marcando 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 expected

Reescrita 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 != 3

conftest.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 parameter

Executando 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_add

Verificaçã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

  1. Escrevendo seus primeiros testes com pytest
  2. Fixtures e configuração/desmontagem
  3. Parametrização e cobertura de testes
  4. Simulação com unittest.mock
← Voltar para Python Academy