pytest

Best practices for writing and organizing tests with pytest including fixtures, parametrize, and plugins.

microsoft/debugpy10 installsMITSynced Aug 25

Works with

Claude CodeCursorCodex CLIGitHub CopilotGemini CLI
---
name: pytest
description: Best practices for writing and organizing tests with pytest including fixtures, parametrize, and plugins.
license: MIT
---

# 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.

More Testing skills

← All Testing skills

Check your AI visibility

One URL in, a 0–100 score and the exact fixes out.

RUN THE CHECK

Browse all the tools

15 tools across six categories
13 of them never send your data anywhere

Free · No signup · No trial clock

SEE THE DIRECTORY