skillby microsoft
pytest
Best practices for writing and organizing tests with pytest including fixtures, parametrize, and plugins.
Installs: 0
Used in: 1 repos
Updated: 6h ago
$
npx ai-builder add skill microsoft/pytestInstalls to .claude/skills/pytest/
# Skill: pytest Best practices for writing and organizing tests with pytest including fixtures, parametrize, and plugins. ## When to Use Apply this skill when writing and organizing tests with pytest — fixtures, parametrize, markers, plugins, and test structure. ## Test Organization - Place tests in a `tests/` directory mirroring the source structure. - Name test files `test_<module>.py` and test functions `test_<behavior>()`. - Group related tests in classes only when they share fixtures/setup. ## Fixtures - Define fixtures at the narrowest scope needed (`function` > `class` > `module` > `session`). - Use `conftest.py` for shared fixtures; put it at the appropriate directory level. - Prefer factory fixtures over complex fixture inheritance. - Use `yield` fixtures for setup/teardown; prefer `tmp_path` over `tempfile`. ## Parametrize - Use `@pytest.mark.parametrize` for data-driven tests with multiple inputs. - Give test IDs (`ids=...`) for readable test output. - Combine `parametrize` with fixtures for cross-product testing. ## Assertions - Use plain `assert` statements — pytest rewrites them for clear failure messages. - Use `pytest.raises(ExceptionType, match=...)` for exception testing. - Use `pytest.approx()` for floating-point comparisons. ## Plugins - Common plugins: `pytest-cov`, `pytest-mock`, `pytest-asyncio`, `pytest-xdist`, `pytest-timeout`. - Use `pytest-mock`'s `mocker` fixture over raw `unittest.mock.patch`. ## Pitfalls - Don't use `session`-scoped fixtures for mutable state. - Don't assert on implementation details — test observable behavior. - Avoid test interdependence; each test should be runnable in isolation.
Quick Install
$
npx ai-builder add skill microsoft/pytestDetails
- Type
- skill
- Author
- microsoft
- Slug
- microsoft/pytest
- Created
- 6h ago