본문으로 건너뛰기
cccskills
무료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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(1)

  • SKILL.md5.2 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

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

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Jamie-BitFlight/claude_skills672026년 10월 20일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Jamie-BitFlight/claude_skills672026년 10월 20일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Jamie-BitFlight/claude_skills672026년 10월 20일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Jamie-BitFlight/claude_skills672026년 10월 20일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Jamie-BitFlight/claude_skills672026년 10월 20일 업데이트

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

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Jamie-BitFlight/claude_skills672026년 10월 20일 업데이트

Jamie-BitFlight의 스킬 모두 보기

이 스킬의 문제 신고