pytest-skill
Ajuda seu agente a criar testes de alta qualidade para código Python usando pytest. Ele configura testes com recursos avançados para garantir que o software funcione corretamente.
O que ela faz
Esta ferramenta ajuda a criar testes automáticos para seu código Python usando a biblioteca pytest. Ela gera testes que verificam se seu código funciona como esperado, incluindo cenários complexos.
Quando usar
- ✓Quando você precisa escrever testes para seu código Python.
- ✓Ao usar a biblioteca pytest e quiser aproveitar seus recursos avançados.
- ✓Para garantir que seu código Python funcione corretamente em diferentes situações.
Exemplo do que pedir para a IA
“Crie testes pytest para minha função que soma dois números, usando fixtures e parametrização.”
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
A ferramenta usa padrões comuns do pytest, como fixtures para configurar testes, parametrização para testar múltiplos valores e marcadores para organizar testes. Ela pode simular partes do seu código (mocking) para isolar o que está sendo testado.
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 sickn33/agentic-awesome-skills --skill pytest-skillOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/pytest-skill/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.
Habilidade de Teste com Pytest
Quando Usar
Use esta habilidade quando precisar gerar testes pytest de nível de produção em Python com fixtures, parametrização, marcadores, mocking e padrões conftest. Use quando o usuário mencionar "pytest", "conftest", "@pytest.fixture", "@pytest.mark", "Python test". Dispara em: "pytest", "conftest", "Python test", "parametrize", "Python...
Padrões Principais
Teste Básico
import pytest
def test_addition():
assert 2 + 3 == 5
def test_exception():
with pytest.raises(ValueError, match="invalid"):
int("not_a_number")
class TestCalculator:
def test_add(self):
calc = Calculator()
assert calc.add(2, 3) == 5
def test_divide_by_zero(self):
with pytest.raises(ZeroDivisionError):
Calculator().divide(10, 0)
Fixtures
@pytest.fixture
def calculator():
return Calculator()
@pytest.fixture
def db_connection():
conn = Database.connect("test_db")
yield conn # teardown after yield
conn.rollback()
conn.close()
@pytest.fixture(scope="module")
def api_client():
client = APIClient(base_url="http://localhost:8000")
yield client
client.logout()
# conftest.py - shared fixtures
@pytest.fixture(autouse=True)
def reset_state():
State.reset()
yield
State.cleanup()
# Usage
def test_add(calculator):
assert calculator.add(2, 3) == 5
Parametrização
@pytest.mark.parametrize("input,expected", [
("hello", 5), ("", 0), ("pytest", 6),
])
def test_string_length(input, expected):
assert len(input) == expected
@pytest.mark.parametrize("a,b,expected", [
(2, 3, 5), (-1, 1, 0), (0, 0, 0),
])
def test_add(calculator, a, b, expected):
assert calculator.add(a, b) == expected
Marcadores
@pytest.mark.slow
def test_large_dataset(): ...
@pytest.mark.skip(reason="Not implemented")
def test_future_feature(): ...
@pytest.mark.skipif(sys.platform == "win32", reason="Unix only")
def test_unix_permissions(): ...
@pytest.mark.xfail(reason="Known bug #123")
def test_known_bug(): ...
Mocking
from unittest.mock import patch, MagicMock
def test_send_email(mocker):
mock_smtp = mocker.patch("myapp.email.smtplib.SMTP")
send_welcome_email("user@test.com")
mock_smtp.return_value.sendmail.assert_called_once()
def test_api_call(mocker):
mock_response = mocker.Mock()
mock_response.status_code = 200
mock_response.json.return_value = {"users": [{"name": "Alice"}]}
mocker.patch("myapp.service.requests.get", return_value=mock_response)
users = get_users()
assert len(users) == 1
@patch("myapp.service.database")
def test_save_user(mock_db):
mock_db.save.return_value = True
assert save_user({"name": "Alice"}) is True
mock_db.save.assert_called_once()
Asserções
assert x == y
assert x != y
assert x in collection
assert isinstance(obj, MyClass)
assert 0.1 + 0.2 == pytest.approx(0.3)
with pytest.raises(ValueError) as exc_info:
raise ValueError("bad")
assert "bad" in str(exc_info.value)
Anti-Padrões
| Ruim | Bom | Por quê |
|---|---|---|
self.assertEqual() |
assert x == y |
pytest rewrites dão melhor saída |
Setup em __init__ |
@pytest.fixture |
Gerenciamento do ciclo de vida |
| Estado global | Fixture com yield |
Limpeza adequada |
| Funções de teste enormes | Testes pequenos e focados | Depuração mais fácil |
Referência Rápida
| Tarefa | Comando |
|---|---|
| Executar todos | pytest |
| Executar arquivo | pytest tests/test_login.py |
| Executar específico | pytest tests/test_login.py::test_login_success |
| Por marcador | pytest -m slow |
| Por palavra-chave | pytest -k "login and not invalid" |
| Verbose | pytest -v |
| Parar no primeiro erro | pytest -x |
| Últimos falhos | pytest --lf |
| Cobertura | pytest --cov=myapp --cov-report=html |
| Paralelo | pytest -n auto (pytest-xdist) |
pyproject.toml
[tool.pytest.ini_options]
testpaths = ["tests"]
markers = ["slow: slow tests", "integration: integration tests"]
addopts = "-v --tb=short"
Padrões Avançados
Para padrões de nível de produção, veja reference/playbook.md:
| Seção | O que contém |
|---|---|
| §1 Config | pytest.ini + pyproject.toml com marcadores, cobertura |
| §2 Fixtures | Escopo, fábricas, teardown, autouse, tmp_path |
| §3 Parametrização | Básico, com IDs, cartesiano, indireto |
| §4 Mocking | pytest-mock, monkeypatch, spies, variáveis de ambiente |
| §5 Async | pytest-asyncio, fixtures async, cliente async |
…
Perguntas frequentes
O que são 'fixtures'?
Fixtures são como preparativos para seus testes. Elas configuram o ambiente ou os dados necessários antes de um teste rodar e podem limpar depois.
O que é 'parametrize'?
Parametrize permite que você execute o mesmo teste várias vezes com dados diferentes, sem ter que escrever o teste repetidamente.
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 isoladamente.
Detalhes
Descrição original do autor
Generates production-grade pytest tests in Python with fixtures, parametrize, markers, mocking, and conftest patterns. Use when user mentions \"pytest\", \"conftest\", \"@pytest.fixture\", \"@pytest.mark\", \"Python test\".
Popularidade
- Estrelas no GitHub
- 48 mil
- Posição no ranking
- #3930
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
00-andruia-consultant
Ajuda seu agente a iniciar ou melhorar projetos de IA. Ele analisa código, sugere ferramentas e cria planos de ação em espanhol.
sickn33/agentic-awesome-skills
007
Faz seu agente realizar auditorias de segurança e modelagem de ameaças. É útil para proteger projetos contra ataques e vulnerabilidades.
sickn33/agentic-awesome-skills
10-andruia-skill-smith
Ajuda seu agente a criar ou melhorar ferramentas de IA. Ele define como as ferramentas funcionam, escreve a documentação e valida a estrutura.
sickn33/agentic-awesome-skills
20-andruia-niche-intelligence
Faz seu agente criar um resumo sobre um setor específico. É útil para entender o contexto, regras, padrões de uso e riscos de um projeto, usando fontes confiáveis.
sickn33/agentic-awesome-skills
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