with one click
test-runner
Execução e análise de testes automatizados
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Execução e análise de testes automatizados
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Python best practices e styleguide
Integração completa com Notion usando MCP customizado (notion-automation-suite)
Gera critérios de aceite Given/When/Then para requisitos funcionais. Inclui happy path, edge cases e falhas.
Cria Architecture Decision Records (ADRs) para decisões técnicas. Inclui alternativas, justificativa e consequências.
Extrai especificações de um sistema legado (código existente) quando não há documentação adequada.
Converte input não estruturado (texto, notas, docs parciais) em requisitos funcionais (FR) e perguntas abertas. Não inventa requisitos.
| name | test-runner |
| description | Execução e análise de testes automatizados |
| triggers | ["test","pytest","jest","testes","coverage"] |
Ativar quando:
# pytest (preferido)
pytest -v --tb=short
# unittest
python -m unittest discover
# Com cobertura
pytest --cov=src --cov-report=term-missing
# Jest
npm test
# Vitest
npx vitest run
# Com cobertura
npm test -- --coverage
go test ./... -v
go test ./... -cover
| Flag | Uso |
|---|---|
-v | Verbose |
-x | Para no primeiro erro |
--lf | Roda últimos falhando |
-k "nome" | Filtra por nome |
--cov=src | Cobertura |
--tb=short | Traceback curto |
-n auto | Paralelo (pytest-xdist) |
| Flag | Uso |
|---|---|
--verbose | Detalhado |
--coverage | Cobertura |
--watch | Watch mode |
-t "nome" | Filtra por nome |
--bail | Para no primeiro erro |
## Test Report
### Sumário
| Métrica | Valor |
|---------|-------|
| Total | 42 |
| Passou | 40 ✅ |
| Falhou | 2 ❌ |
| Skipped | 0 ⏭️ |
| Cobertura | 78% |
### Testes Falhando
#### `test_user_creation`
**Arquivo:** `tests/test_user.py:45`
AssertionError: Expected 201, got 400
**Causa provável:** Validação de email falhando
---
### Cobertura por Arquivo
| Arquivo | Cobertura |
|---------|-----------|
| `src/auth.py` | 95% |
| `src/user.py` | 82% |
| `src/utils.py` | 45% ⚠️ |
### Arquivos Sem Cobertura
- `src/legacy.py`
- `src/migrations/`
### Recomendações
1. Adicionar testes para `src/utils.py`
2. Investigar `test_user_creation`
# Esperado vs Obtido
assert result == expected
# Verificar: lógica, dados de teste, estado
# Módulo não encontrado
# Verificar: PYTHONPATH, venv, dependências
# Teste demorou demais
# Verificar: mocks, I/O, loops infinitos
# Setup/teardown falhou
# Verificar: database, arquivos, conexões
# pytest com cobertura detalhada por arquivo
pytest --cov=src --cov-report=term-missing --cov-report=html
# Verificar arquivos abaixo de 90%
pytest --cov=src --cov-report=term-missing | grep -E "TOTAL|^\w+.*\s+\d+%" | awk '$NF < 90'
def test_should_do_something():
# Arrange
data = setup_data()
# Act
result = function_under_test(data)
# Assert
assert result == expected
# Bom
test_user_creation_with_valid_email_returns_201
test_login_with_wrong_password_returns_401
# Ruim
test_1
test_user
Usar pytest para todos os testes:
A estrutura dos testes deve espelhar a estrutura da aplicação:
app/
├── users/
│ ├── controllers/
│ │ └── user_controller.py
│ └── models/
│ └── user.py
tests/
├── users/
│ ├── controllers/
│ │ └── test_user_controller.py
│ └── models/
│ └── test_user.py
Regra: Quando procurar um teste de um arquivo, ele deve estar na mesma estrutura relativa.
Todos os acessos externos devem ser mockados:
Banco de dados:
Sistema de fila (Redis, RabbitMQ, etc.):
Cache (Redis, Memcached, etc.):
APIs externas:
responses ou httpx para mockar requisições HTTPSistema de arquivos:
tempfile ou mockar operações de arquivoArquivos de teste:
test_*.py ou *_test.pytest_user_controller.pyFunções de teste:
test_*test_create_user_success()Descritivo:
test_create_user_with_valid_data_success()test_create_user_with_invalid_email_fails()Cada teste deve ter:
Exemplo:
def test_create_user_success():
# arrange
user_data = {"email": "test@example.com", "name": "Test User"}
# act
result = create_user(user_data)
# assert
assert result.email == "test@example.com"
assert result.id is not None
Usar fixtures para setup comum:
conftest.pyExemplo:
@pytest.fixture
def user_data():
return {"email": "test@example.com", "name": "Test User"}
@pytest.fixture
def mock_redis(monkeypatch):
mock_redis = Mock()
monkeypatch.setattr("app.utils.cache_system.CacheSystem", mock_redis)
return mock_redis
Templates obrigatórios:
core/templates/django/pytest.inicore/templates/django/conftest.pyUsar sempre os templates como base.
Testes unitários:
Testes de integração:
Priorizar testes unitários (maioria).
conftest.py para setup comum