Skip to content
Skillpedia
Testing48k · #3930

pytest-skill

Helps your agent create high-quality tests for Python code using pytest. It sets up tests with advanced features to ensure software works correctly.

What it does

This tool helps create automatic tests for your Python code using the pytest library. It generates tests that verify your code works as expected, including complex scenarios.

When to use it

  • ✓When you need to write tests for your Python code.
  • ✓When using the pytest library and wanting to leverage its advanced features.
  • ✓To ensure your Python code functions correctly in various situations.

Example of what to ask your AI

“Create pytest tests for my function that adds two numbers, using fixtures and parametrization.”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/pytest-skill/SKILL.md

Ready-to-paste message

Use this skill to help me: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/pytest-skill/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

The tool uses common pytest patterns like fixtures for test setup, parametrization for testing multiple values, and markers for organizing tests. It can simulate parts of your code (mocking) to isolate what's being tested.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add sickn33/agentic-awesome-skills --skill pytest-skill

Or download just the file:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/pytest-skill/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

Pytest Testing Skill

When to Use

Use this skill when you need 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". Triggers on: "pytest", "conftest", "Python test", "parametrize", "Python...

Core Patterns

Basic Test

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

Parametrize

@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

Markers

@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()

Assertions

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-Patterns

Bad Good Why
self.assertEqual() assert x == y pytest rewrites give better output
Setup in __init__ @pytest.fixture Lifecycle management
Global state Fixture with yield Proper cleanup
Huge test functions Small focused tests Easier debugging

Quick Reference

Task Command
Run all pytest
Run file pytest tests/test_login.py
Run specific pytest tests/test_login.py::test_login_success
By marker pytest -m slow
By keyword pytest -k "login and not invalid"
Verbose pytest -v
Stop first fail pytest -x
Last failed pytest --lf
Coverage pytest --cov=myapp --cov-report=html
Parallel pytest -n auto (pytest-xdist)

pyproject.toml

[tool.pytest.ini_options]
testpaths = ["tests"]
markers = ["slow: slow tests", "integration: integration tests"]
addopts = "-v --tb=short"

Deep Patterns

For production-grade patterns, see reference/playbook.md:

Section What's Inside
§1 Config pytest.ini + pyproject.toml with markers, coverage
§2 Fixtures Scoping, factories, teardown, autouse, tmp_path
§3 Parametrize Basic, with IDs, cartesian, indirect
§4 Mocking pytest-mock, monkeypatch, spies, env vars
§5 Async pytest-asyncio, async fixtures, async client

…

FAQ

What are 'fixtures'?

Fixtures are like preparations for your tests. They set up the necessary environment or data before a test runs and can clean up afterward.

What is 'parametrize'?

Parametrize allows you to run the same test multiple times with different data, without having to write the test repeatedly.

What is 'mocking'?

Mocking is creating fake versions of parts of your code (like network calls or database interactions) so you can test your main code in isolation.

Details

Original description by the author

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\".

repo: sickn33/agentic-awesome-skills

Popularity

GitHub stars
48k
Ranking position
#3930
License
MIT
Updated
10/15/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills