Skip to content
cccskills
FreePublished on GitHub

python3-test-design

Guides pytest test architecture for Python 3.11+ using behavioral contracts, risk, and maintenance-adjusted value. Use when choosing unit/integration/property/e2e boundaries, fixture strategy, coverage measurement, or mutation testing. Preserves existing project gates but does not invent test-pyramid ratios, coverage percentages, mutation-score targets, or tests for implementation detail.

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md5.2 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

Python Test Design Skill

Design Python tests under the shared rules in /python-engineering:standards-for-python-development. Repository requirements and established project gates take precedence. This skill adds Python/pytest-specific boundary and fixture guidance; it does not create a second testing philosophy.

Decision order

  1. Establish the supported behavior, contract, callers/consumers, existing protection, and relevant failure consequence before deciding what test to retain.
  2. Separate direct validation of the current change from permanent regression protection.
  3. Prefer the highest stable contract boundary that still discriminates the consequential failure with acceptable cost and diagnostics.
  4. Keep unit tests TDD-sized: one small behavioral slice that survives behavior-preserving refactors.
  5. Do not mirror private helpers, branches, constants, incidental call counts, or decomposition unless those details are themselves authoritative contracts.
  6. Preserve an existing repository coverage/mutation gate. When none exists, do not invent one.

Boundary selection

Unit / function

Use when a small boundary is itself stable, drives the next TDD behavior, or uniquely distinguishes an important fault more cheaply than broader evidence. Pure functions and algorithms often fit here, but their implementation branches do not automatically become permanent test obligations.

Integration / contract / lifecycle

Use when the guarantee depends on component composition: databases, filesystems, protocols, serialization consumers, packaging/startup, transactions, persistence, authorization, retries, recovery, or multi-step state transitions. Prefer this boundary over duplicated white-box unit tests when it protects the same externally meaningful failure and remains diagnosable.

Property-based / stateful

Use Hypothesis when a justified invariant spans many inputs or action sequences and examples would poorly represent the state space. Justify the invariant independently; round trips alone can preserve paired bugs.

from hypothesis import given, strategies as st


@given(st.lists(st.integers()))
def test_sort_preserves_elements(data: list[int]) -> None:
    assert sorted(sorted(data)) == sorted(data)

BDD / acceptance

Use when user-visible workflow requirements benefit from scenario language or stakeholder-readable acceptance evidence. Do not add a BDD layer merely to duplicate an existing contract test.

Fixtures and doubles

Use the smallest fixture structure that keeps scenario, action, observation, and cleanup legible. Prefer factories/builders when they reduce genuine repeated setup; do not build a parallel fixture framework that reproduces production complexity.

Use fakes/mocks at real seams. State what a double removes from observation and do not mock away the mechanism the test is intended to challenge. For important integration assumptions, validate the double against the real dependency where practical.

Coverage

Coverage is measurement, not a universal quality score.

  • Respect a repository's existing fail_under or equivalent gate when one is configured.
  • When no gate exists, enable useful branch/missing-line reporting without inventing a percentage.
  • Inspect uncovered changed behavior for risk; do not create tests solely to raise the number.
  • Do not infer suite value from test counts or unit/integration/e2e ratios.

Example measurement configuration without a new threshold:

[tool.coverage.run]
branch = true
source = ["src"]
omit = ["**/tests/**", "**/__pycache__/**"]

[tool.coverage.report]
show_missing = true
exclude_lines = [
    "pragma: no cover",
    "if TYPE_CHECKING:",
    "raise NotImplementedError",
]

Mutation testing

Use mutation testing only when it materially strengthens confidence in important logic and the mutations reach the intended behavioral observation. Preserve a project mutation gate if one exists; otherwise do not invent a mutation-score target.

uv run mutmut run --paths-to-mutate=packages/auth/
uv run mutmut results

A mutant killed by import/collection/setup failure does not prove that the intended test detects the relevant defect.

Test organization

Follow the existing project's layout. For a new pytest project, separate boundaries only when the distinction improves execution or ownership, for example:

tests/
├── conftest.py
├── unit/
├── integration/
└── e2e/

Do not create directories or test categories merely to satisfy a pyramid shape.

Related resources

  • Agent: python-engineering:python-pytest-architect for implementation
  • Skill: python-engineering:standards-for-python-development for shared Python rules
  • Skill: python-engineering:python3-testing for pytest implementation patterns

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Add automated documentation updater to any Claude skill. Creates a Python sync script that downloads upstream docs, processes markdown for AI consumption, and maintains local cache with configurable refresh. Collects template variables, then delegates implementation through 5-phase workflow. Use when adding auto-updating reference documentation to plugins or skills.

The English summary is being prepared. Showing the original description.

Jamie-BitFlight/claude_skills67Updated Oct 18, 2026

SAM-style feature initiation workflow — discovery through codebase analysis, architecture spec, task decomposition, validation, and context manifest. Use when a user asks to add a feature, plan a feature, or convert an idea into an executable SAM plan.

The English summary is being prepared. Showing the original description.

Jamie-BitFlight/claude_skills67Updated Oct 18, 2026

Browser automation for AI agents using the agent-browser CLI and Playwright. Use when navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, logging into sites, or automating any browser task. Triggers on "open a website", "fill out a form", "click a button", "scrape data", "test this web app", "automate browser actions", or any programmatic web interaction request.

The English summary is being prepared. Showing the original description.

Jamie-BitFlight/claude_skills67Updated Oct 18, 2026

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction.

The English summary is being prepared. Showing the original description.

Jamie-BitFlight/claude_skills67Updated Oct 18, 2026

Runs the description-drift experiment — spawns all Claude Code agents simultaneously to collect self-reported capabilities, then compares them against static frontmatter descriptions to reveal how reliable orchestrator routing based on descriptions actually is. Use when measuring description drift across the agent fleet, re-running the capability collection experiment, analyzing a specific agent's self-reported capabilities, or auditing whether frontmatter descriptions accurately reflect agent behavior.

The English summary is being prepared. Showing the original description.

Jamie-BitFlight/claude_skills67Updated Oct 18, 2026

Create or adapt Claude Code agent definitions. Use when creating an agent, changing subagent configuration, selecting agent scope, or designing a specialized delegation role.

The English summary is being prepared. Showing the original description.

Jamie-BitFlight/claude_skills67Updated Oct 18, 2026

See all skills by Jamie-BitFlight

Report a problem with this skill