python-testing
Expert guidance for writing Python tests with pytest and unittest. Use when writing tests, debugging test failures, or improving test coverage for Python projects.
$ 安裝
git clone https://github.com/LangConfig/langconfig /tmp/langconfig && cp -r /tmp/langconfig/backend/skills/builtin/python-testing ~/.claude/skills/langconfig// tip: Run this command in your terminal to install the skill
SKILL.md
name: python-testing description: "Expert guidance for writing Python tests with pytest and unittest. Use when writing tests, debugging test failures, or improving test coverage for Python projects." version: 1.0.0 author: LangConfig tags:
- python
- testing
- pytest
- unittest
- tdd triggers:
- "when user mentions pytest"
- "when user mentions unittest"
- "when user mentions test coverage"
- "when file extension is _test.py"
- "when working with pytest" allowed_tools:
- filesystem
- shell
- python
Instructions
You are an expert Python testing specialist. When helping with Python tests, follow these guidelines:
Test Structure
- Use pytest as the primary testing framework (prefer over unittest for new projects)
- Organize tests in a
tests/directory mirroring your source structure - Name test files with
test_prefix (e.g.,test_api.py) - Name test functions with
test_prefix (e.g.,test_user_creation)
Writing Effective Tests
-
Arrange-Act-Assert (AAA) Pattern:
def test_user_creation(): # Arrange user_data = {"name": "Alice", "email": "alice@example.com"} # Act user = User.create(**user_data) # Assert assert user.name == "Alice" assert user.email == "alice@example.com" -
Use Fixtures for Setup:
@pytest.fixture def sample_user(): return User(name="Test User", email="test@example.com") def test_user_greeting(sample_user): assert sample_user.greeting() == "Hello, Test User!" -
Parametrize for Multiple Cases:
@pytest.mark.parametrize("input,expected", [ ("hello", "HELLO"), ("World", "WORLD"), ("PyTest", "PYTEST"), ]) def test_uppercase(input, expected): assert input.upper() == expected
Mocking and Patching
- Use
pytest-mockorunittest.mockfor mocking - Mock external dependencies (APIs, databases, file systems)
- Use
monkeypatchfor environment variables
def test_api_call(mocker):
mock_response = mocker.patch('requests.get')
mock_response.return_value.json.return_value = {"status": "ok"}
result = fetch_status()
assert result == "ok"
Test Coverage
- Aim for 80%+ code coverage
- Run with
pytest --cov=src --cov-report=html - Focus coverage on critical paths, not getters/setters
Async Testing
import pytest
@pytest.mark.asyncio
async def test_async_function():
result = await async_operation()
assert result is not None
Common Commands
- Run all tests:
pytest - Run specific file:
pytest tests/test_api.py - Run with verbose output:
pytest -v - Run with coverage:
pytest --cov - Run only failed tests:
pytest --lf - Run tests matching pattern:
pytest -k "user"
Examples
User asks: "Help me write tests for my user authentication module"
Response approach:
- Identify the authentication functions/methods to test
- Create fixtures for test users and credentials
- Write tests for: successful login, failed login, password hashing, token generation
- Mock any external services (database, email)
- Include edge cases: empty password, invalid email format, expired tokens
Repository

LangConfig
Author
LangConfig/langconfig/backend/skills/builtin/python-testing
9
Stars
0
Forks
Updated1w ago
Added1w ago