When 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": "alice@example.com"}
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