python-testing-patterns
Faz seu agente escrever testes para o código Python. Isso garante que o código funcione como esperado e ajuda a encontrar erros.
O que ela faz
Este guia ensina como testar seu código Python de forma completa. Ele mostra como usar ferramentas como pytest, criar testes para diferentes partes do seu programa e simular partes externas para que seus testes funcionem melhor.
Quando usar
- ✓Quando você está escrevendo testes para seu código Python.
- ✓Ao organizar um conjunto de testes ou a estrutura para rodá-los.
- ✓Para garantir que seu código funciona como esperado antes de lançá-lo.
Exemplo do que pedir para a IA
“Como posso escrever um teste simples para uma função que soma dois números em Python?”
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
Mensagem pronta para colar
Como funciona
O guia explica diferentes tipos de testes e como estruturá-los. Ele também mostra exemplos de como nomear seus testes de forma clara e como usar ferramentas para simular dependências externas ou controlar o tempo.
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 wshobson/agents --skill python-testing-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/python-development/skills/python-testing-patterns/SKILL.md -o SKILL.mdConteú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
Guia completo para implementar estratégias de teste robustas em Python usando pytest, fixtures, mocking, parametrização e práticas de desenvolvimento orientado a testes.
Quando Usar Esta Habilidade
- Escrever testes unitários para código Python
- Configurar suítes de teste e infraestrutura de teste
- Implementar desenvolvimento orientado a testes (TDD)
- Criar testes de integração para APIs e serviços
- Simular dependências e serviços externos (mocking)
- Testar código assíncrono e operações concorrentes
- Configurar testes contínuos em CI/CD
- Implementar testes baseados em propriedades (property-based testing)
- Testar operações de banco de dados
- Depurar testes que falham
Conceitos Principais
1. Tipos de Teste
- Testes Unitários: Testam funções/classes individuais isoladamente
- Testes de Integração: Testam a interação entre componentes
- Testes Funcionais: Testam funcionalidades completas de ponta a ponta
- Testes de Performance: Medem a velocidade e o uso de recursos
2. Estrutura de Teste (Padrão AAA)
- Arrange (Organizar): Configurar dados de teste e pré-condições
- Act (Agir): Executar o código sob teste
- Assert (Verificar): Validar os resultados
3. Cobertura de Teste
- Medir qual código é executado pelos testes
- Identificar caminhos de código não testados
- Buscar cobertura significativa, não apenas porcentagens altas
4. Isolamento de Teste
- Testes devem ser independentes
- Sem estado compartilhado entre testes
- Cada teste deve se limpar após sua execução
Início Rápido
# test_example.py
def add(a, b):
return a + b
def test_add():
"""Basic test example."""
result = add(2, 3)
assert result == 5
def test_add_negative():
"""Test with negative numbers."""
assert add(-1, 1) == 0
# Run with: pytest test_example.py
Padrões detalhados e exemplos práticos
A documentação detalhada dos padrões está em references/details.md. Leia este arquivo quando a navegação acima for insuficiente.
Melhores Práticas de Teste
Organização de Testes
# tests/
# __init__.py
# conftest.py # Shared fixtures
# test_unit/ # Unit tests
# test_models.py
# test_utils.py
# test_integration/ # Integration tests
# test_api.py
# test_database.py
# test_e2e/ # End-to-end tests
# test_workflows.py
Convenção de Nomenclatura de Testes
Um padrão comum: test_<unit>_<scenario>_<expected_outcome>. Adapte às preferências da sua equipe.
# Pattern: test_<unit>_<scenario>_<expected>
def test_create_user_with_valid_data_returns_user():
...
def test_create_user_with_duplicate_email_raises_conflict():
...
def test_get_user_with_unknown_id_returns_none():
...
# Good test names - clear and descriptive
def test_user_creation_with_valid_data():
"""Clear name describes what is being tested."""
pass
def test_login_fails_with_invalid_password():
"""Name describes expected behavior."""
pass
def test_api_returns_404_for_missing_resource():
"""Specific about inputs and expected outcomes."""
pass
# Bad test names - avoid these
def test_1(): # Not descriptive
pass
def test_user(): # Too vague
pass
def test_function(): # Doesn't explain what's tested
pass
Testando Comportamento de Retentativas (Retry)
Verifique se a lógica de retentativas funciona corretamente usando efeitos colaterais simulados (mock side effects).
from unittest.mock import Mock
def test_retries_on_transient_error():
"""Test that service retries on transient failures."""
client = Mock()
# Fail twice, then succeed
client.request.side_effect = [
ConnectionError("Failed"),
ConnectionError("Failed"),
{"status": "ok"},
]
service = ServiceWithRetry(client, max_retries=3)
result = service.fetch()
assert result == {"status": "ok"}
assert client.request.call_count == 3
def test_gives_up_after_max_retries():
"""Test that service stops retrying after max attempts."""
client = Mock()
client.request.side_effect = ConnectionError("Failed")
service = ServiceWithRetry(client, max_retries=3)
with pytest.raises(ConnectionError):
service.fetch()
assert client.request.call_count == 3
def test_does_not_retry_on_permanent_error():
"""Test that permanent errors are not retried."""
client = Mock()
client.request.side_effect = ValueError("Invalid input")
service = ServiceWithRetry(client, max_retries=3)
with pytest.raises(ValueError):
service.fetch()
# Only called once - no retry for ValueError
assert client.request.call_count == 1
Simulação de Tempo com Freezegun
…
Perguntas frequentes
O que são testes unitários e de integração?
Testes unitários verificam pequenas partes do seu código isoladamente, enquanto testes de integração verificam como diferentes partes do seu código funcionam juntas.
O que é 'mocking'?
Mocking é criar versões falsas de partes do seu código (como chamadas de rede ou banco de dados) para que você possa testar seu código principal sem depender dessas partes externas.
O que é TDD (Desenvolvimento Guiado por Testes)?
TDD é uma abordagem onde você escreve os testes antes de escrever o código real, garantindo que o código atenda aos requisitos definidos pelos testes.
Detalhes
Descrição original do autor
Implement comprehensive testing strategies with pytest, fixtures, mocking, and test-driven development. Use when writing Python tests, setting up test suites, or implementing testing best practices.
repo: wshobson/agents
Popularidade
- Estrelas no GitHub
- 41 mil
- Posição no ranking
- #4935
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
screen-reader-testing
Faz seu agente testar sites usando leitores de tela para garantir que sejam acessíveis.
wshobson/agents
wcag-audit-patterns
Ajuda seu agente a auditar sites para acessibilidade e corrigir problemas de acordo com as diretrizes WCAG.
wshobson/agents
multi-reviewer-patterns
Faz seu agente coordenar revisões de código paralelas, deduplicando achados e consolidando relatórios.
wshobson/agents
parallel-debugging
Permite ao agente depurar problemas complexos com investigações paralelas e análise de causa raiz.
wshobson/agents
Skills parecidas
cpp-testing
Faz seu agente escrever e melhorar testes para código C++. Ajuda a configurar ferramentas de teste e a corrigir erros.
affaan-m/ECC
csharp-testing
Ajuda seu agente a criar testes para código C# e .NET. Ele usa as melhores práticas para garantir que os testes sejam eficientes e confiáveis.
affaan-m/ECC
django-tdd
Faz seu agente aplicar estratégias de teste para Django com pytest-django e TDD. É útil para escrever testes robustos e garantir a qualidade do código, especialmente para APIs DRF.
affaan-m/ECC