About pytest
pytest is a skill guide for Python developers writing and running tests. It covers fixtures, parametrization, mocking, configuration, coverage reports, and parallel test execution.
Key features
- 01Write and run Python tests
- 02Manage setup and teardown with fixtures
- 03Parametrize test inputs
- 04Isolate dependencies with mocks
- 05Configure pytest and generate coverage reports
- 06Run tests in parallel with pytest-xdist
Use cases
- 01Write unit tests for Python projects
- 02Reuse setup and dependency injection in tests
- 03Check function behavior with varied inputs
- 04Run tests and review coverage in CI
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ partme-ai/ full-stack-skills --skill pytestAfter installing, type/pytestin Claude Code to confirm it loaded.
Bundled filesLICENSE.txt
Details
From the project READMEWhen to use this skill
Use this skill whenever the user wants to:
- Write and run Python unit tests with pytest
- Use fixtures for test setup, teardown, and dependency injection
- Parametrize tests to run with multiple input sets
- Mock dependencies with
pytest-mockorunittest.mock - Configure pytest via
pytest.ini,pyproject.toml, orconftest.py - Generate coverage reports with
pytest-cov - Run tests in parallel with
pytest-xdist
How to use this skill
Workflow
- Write test functions with
test_prefix orTestclass - Use fixtures in
conftest.pyfor shared setup and dependency injection - Run tests with
pytestCLI, applying markers and filters as needed - Analyze results with coverage and reporting plugins
1. Basic Test
def test_addition():
assert 1 + 1 == 2
def test_string_upper():
assert "hello".upper() == "HELLO"
2. Fixtures
import pytest
@pytest.fixture
def sample_user():
return {"name": "Alice", "email": "[email protected]"}
def test_user_name(sample_user):
assert sample_user["name"] == "Alice"
@pytest.fixture(autouse=True)
def reset_database(db):
db.clear()
yield
db.clear()
3. Parametrize
import pytest
@pytest.mark.parametrize("input,expected", [
("hello", 5),
("", 0),
("pytest", 6),
])
def test_string_length(input, expected):
assert len(input) == expected
4. Mocking
def test_api_call(mocker):
mock_get = mocker.patch("requests.get")
mock_get.return_value.json.return_value = {"status": "ok"}
result = fetch_status()
assert result == "ok"
mock_get.assert_called_once()
5. Running Tests
# Run all tests
pytest
# Verbose with pattern filter
pytest -v -k "test_user"
# With coverage
pytest --cov=mypackage --cov-report=html
# Parallel execution
pytest -n auto
Best Practices
- Keep tests independent with no shared mutable state; use fixtures for setup and teardown
- Use clear, descriptive test names that explain the expected behavior
- Avoid depending on test execution order; use
conftest.pyfor shared fixtures - Run the full test suite in CI; use
--covfor coverage and--maxfail=1to fail fast - Use markers (
@pytest.mark.slow) to categorize tests and run subsets
Resources
- Official documentation: https://docs.pytest.org/
- pytest-cov: https://pytest-cov.readthedocs.io/
- pytest-xdist: https://github.com/pytest-dev/pytest-xdist
Keywords
pytest, Python testing, fixtures, parametrize, mocking, conftest, coverage, pytest-cov, pytest-xdist, unit testing, markers
Comments
Markdown supported