Loading...
Loading...
Python/pytest TDD specialist for test-driven development workflows. Use when writing tests, auditing test quality, running pytest, or generating test reports. Integrates with uv and pyproject.toml configuration.
npx skill4agent add 89jobrien/steve tdd-pytestTESTING_REPORT.local.mdpyproject.tomlproject/
src/
module.py
tests/
conftest.py # Shared fixtures
test_module.py # Tests for module.py
pyproject.toml # Pytest configurationtest_*.py*_test.pytest_*Test*mock_databasesample_userimport pytest
@pytest.fixture
def sample_config():
return {"key": "value"}
@pytest.fixture
def mock_client(mocker):
return mocker.MagicMock()@pytest.mark.parametrize("input,expected", [
("hello", "HELLO"),
("world", "WORLD"),
("", ""),
])
def test_uppercase(input, expected):
assert input.upper() == expectedimport pytest
@pytest.mark.asyncio
async def test_async_function():
result = await async_operation()
assert result == expecteddef test_raises_value_error():
with pytest.raises(ValueError, match="invalid input"):
process_input(None)uv run pytest # Run all tests
uv run pytest tests/test_module.py # Run specific file
uv run pytest -k "test_name" # Run by name pattern
uv run pytest -v --tb=short # Verbose with short traceback
uv run pytest --cov=src --cov-report=term # With coverage-v--verbose-x--exitfirst--tb=short--tb=no-k EXPR-m MARKER--cov=PATH--cov-report=term-missing[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"][tool.pytest.ini_options]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
testpaths = ["tests"]
python_files = ["test_*.py", "*_test.py"]
python_functions = ["test_*"]
python_classes = ["Test*"]
addopts = "-v --tb=short"
markers = [
"slow: marks tests as slow",
"integration: marks integration tests",
]
filterwarnings = [
"ignore::DeprecationWarning",
]
[tool.coverage.run]
source = ["src"]
branch = true
omit = ["tests/*", "*/__init__.py"]
[tool.coverage.report]
exclude_lines = [
"pragma: no cover",
"if TYPE_CHECKING:",
"raise NotImplementedError",
]
fail_under = 80
show_missing = trueTESTING_REPORT.local.md/tdd-pytest:init/tdd-pytest:test [path]/tdd-pytest:test-all/tdd-pytest:report