Pular para o conteúdo
Skillpedia
Testes280 mil · #104

python-testing

Faz seu agente criar testes para código Python. Ele usa ferramentas como pytest para garantir que o código funcione como esperado, cobrindo diferentes cenários.

O que ela faz

Esta ferramenta ajuda você a escrever testes para seu código Python. Ela usa uma técnica chamada TDD (Desenvolvimento Guiado por Testes) e ferramentas como pytest para garantir que seu código funcione como esperado.

Quando usar

  • ✓Ao escrever novo código Python.
  • ✓Ao criar um conjunto de testes para um projeto.
  • ✓Ao verificar a cobertura de testes do seu código.

Exemplo do que pedir para a IA

“Como posso testar uma função que adiciona dois números usando TDD?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/python-testing/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/python-testing/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Você escreve um teste que falha primeiro, depois escreve o código mínimo para fazê-lo passar e, por fim, refatora o código. Ferramentas como pytest ajudam a organizar e executar esses testes.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add affaan-m/ECC --skill python-testing

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/python-testing/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Padrões de Teste em Python

Estratégias abrangentes de teste para aplicações Python usando pytest, metodologia TDD e melhores práticas.

Quando Ativar

  • Escrevendo novo código Python (siga TDD: vermelho, verde, refatorar)
  • Projetando suítes de teste para projetos Python
  • Revisando a cobertura de teste Python
  • Configurando infraestrutura de teste

Filosofia Central de Teste

Desenvolvimento Orientado a Testes (TDD)

Sempre siga o ciclo TDD:

  1. VERMELHO: Escreva um teste que falha para o comportamento desejado
  2. VERDE: Escreva o código mínimo para fazer o teste passar
  3. REFACTORAR: Melhore o código mantendo os testes verdes
# Step 1: Write failing test (RED)
def test_add_numbers():
    result = add(2, 3)
    assert result == 5

# Step 2: Write minimal implementation (GREEN)
def add(a, b):
    return a + b

# Step 3: Refactor if needed (REFACTOR)

Requisitos de Cobertura

  • Meta: 80%+ de cobertura de código
  • Caminhos críticos: 100% de cobertura exigida
  • Use pytest --cov para medir a cobertura
pytest --cov=mypackage --cov-report=term-missing --cov-report=html

Fundamentos do pytest

Estrutura Básica de Teste

import pytest

def test_addition():
    """Test basic addition."""
    assert 2 + 2 == 4

def test_string_uppercase():
    """Test string uppercasing."""
    text = "hello"
    assert text.upper() == "HELLO"

def test_list_append():
    """Test list append."""
    items = [1, 2, 3]
    items.append(4)
    assert 4 in items
    assert len(items) == 4

Asserções

# Equality
assert result == expected

# Inequality
assert result != unexpected

# Truthiness
assert result  # Truthy
assert not result  # Falsy
assert result is True  # Exactly True
assert result is False  # Exactly False
assert result is None  # Exactly None

# Membership
assert item in collection
assert item not in collection

# Comparisons
assert result > 0
assert 0 <= result <= 100

# Type checking
assert isinstance(result, str)

# Exception testing (preferred approach)
with pytest.raises(ValueError):
    raise ValueError("error message")

# Check exception message
with pytest.raises(ValueError, match="invalid input"):
    raise ValueError("invalid input provided")

# Check exception attributes
with pytest.raises(ValueError) as exc_info:
    raise ValueError("error message")
assert str(exc_info.value) == "error message"

Fixtures

Uso Básico de Fixture

import pytest

@pytest.fixture
def sample_data():
    """Fixture providing sample data."""
    return {"name": "Alice", "age": 30}

def test_sample_data(sample_data):
    """Test using the fixture."""
    assert sample_data["name"] == "Alice"
    assert sample_data["age"] == 30

Fixture com Setup/Teardown

@pytest.fixture
def database():
    """Fixture with setup and teardown."""
    # Setup
    db = Database(":memory:")
    db.create_tables()
    db.insert_test_data()

    yield db  # Provide to test

    # Teardown
    db.close()

def test_database_query(database):
    """Test database operations."""
    result = database.query("SELECT * FROM users")
    assert len(result) > 0

Escopos de Fixture

# Function scope (default) - runs for each test
@pytest.fixture
def temp_file():
    with open("temp.txt", "w") as f:
        yield f
    os.remove("temp.txt")

# Module scope - runs once per module
@pytest.fixture(scope="module")
def module_db():
    db = Database(":memory:")
    db.create_tables()
    yield db
    db.close()

# Session scope - runs once per test session
@pytest.fixture(scope="session")
def shared_resource():
    resource = ExpensiveResource()
    yield resource
    resource.cleanup()

Fixture com Parâmetros

@pytest.fixture(params=[1, 2, 3])
def number(request):
    """Parameterized fixture."""
    return request.param

def test_numbers(number):
    """Test runs 3 times, once for each parameter."""
    assert number > 0

Usando Múltiplas Fixtures

@pytest.fixture
def user():
    return User(id=1, name="Alice")

@pytest.fixture
def admin():
    return User(id=2, name="Admin", role="admin")

def test_user_admin_interaction(user, admin):
    """Test using multiple fixtures."""
    assert admin.can_manage(user)

Fixtures Autouse

@pytest.fixture(autouse=True)
def reset_config():
    """Executa automaticamente antes de cada teste."""
    Config.reset()
    yield
    Config.cleanup()

def test_without_fixture_call():
    # reset_config executa automaticamente

…
Perguntas frequentes

O que é TDD?

TDD significa Desenvolvimento Guiado por Testes. É uma abordagem onde você escreve um teste antes de escrever o código real, garantindo que o código atenda aos requisitos.

O que é pytest?

Pytest é uma ferramenta popular para escrever e executar testes em Python. Ela oferece recursos como fixtures e parametrização para tornar os testes mais eficientes.

O que é cobertura de código?

Cobertura de código mede a porcentagem do seu código que é executada pelos seus testes. Um objetivo comum é ter pelo menos 80% de cobertura.

Detalhes

Descrição original do autor

Python testing strategies using pytest, TDD methodology, fixtures, mocking, parametrization, and coverage requirements. Use when writing pytest tests — fixtures, mocks, parametrization, or coverage.

repo: affaan-m/ECC

Popularidade

Estrelas no GitHub
280 mil
Posição no ranking
#104
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas