Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

v1.2.0 (2025-12-23)

Feat

  • Add auto-categorization suggestions mode (#210)

  • Add per-test performance baselines (#209)

  • Warn on marker inheritance conflicts (#208)

Fix

  • resolve scheduled workflow failures

v1.1.0 (2025-12-04)

Breaking Changes

  • Strict filesystem blocking: Small tests now block ALL filesystem access, including tmp_path and tempfile. Use pyfakefs or io.StringIO/io.BytesIO for in-memory file handling in small tests. (#195)

  • Fixed time limits: Time limits are no longer configurable. They are fixed per Google’s testing standards: 1s (small), 5min (medium), 15min (large/xlarge). (#189)

Changed

  • Remediation lists in violation messages now use bullet points instead of numbered lists for consistency (#196)

Added

  • CI, coverage, and downloads badges to README (#190)

  • Enhanced PyPI package metadata for better discoverability (#191)

  • Mocking libraries guide and enhanced quickstart examples in documentation (#192)

  • Improved pytest --markers descriptions with constraint details

Fixed

  • Documentation inconsistencies referencing “allowed paths” after filesystem blocking was made strict

v1.0.0 (2025-12-01)

Highlights

This is the first stable release of pytest-test-categories, bringing Google’s battle-tested testing philosophy to Python. The plugin enforces test timing constraints, resource isolation, and validates test size distributions.

Added

Resource Isolation (Hermeticity)

  • Network isolation: Block socket connections in small tests (#72, #74, #76)

  • Filesystem isolation: Block pathlib, os, and shutil operations in small tests (#120, #132)

  • Process isolation: Block subprocess calls in small tests (#133)

  • Database isolation: Block common database connections in small tests

  • Sleep blocking: Block time.sleep() in small tests to enforce fast execution (#118)

  • Hermeticity violation tracking: Track and report violations in terminal output (#167)

  • JSON violation reports: Include per-type hermeticity violation breakdown in JSON reports (#169)

Configuration

  • Configurable distribution targets: Customize target percentages and tolerances (#165)

  • Enforcement modes: Choose between off, warn, and strict enforcement

Reporting

  • JSON report export: Machine-readable reports for CI/CD integration (#116)

  • Test size reports: Basic and detailed terminal reports

  • Distribution validation: Warn or fail when test pyramid is inverted

Parallel Execution

  • pytest-xdist support: Full compatibility with parallel test execution (#131, #139)

    • Distribution stats aggregated correctly across workers

    • Test reports merged from all workers on controller

    • Timer isolation ensures no race conditions between workers

  • Comprehensive xdist edge case tests: Validate behavior under various parallel scenarios (#164)

Documentation

  • Comprehensive API reference with error codes and remediation guidance (#134, #147)

  • User guide covering all isolation types (#144)

  • Architecture documentation with design philosophy and ADRs (#145)

  • Migration guide, common patterns, and CI integration examples (#146)

  • IDE integration guide for PyCharm and VS Code (#137)

  • Ecosystem integration guides for popular testing libraries (#154)

  • Example project demonstrating best practices (#126, #138)

Developer Experience

  • Base test classes: Inherit from SmallTest, MediumTest, LargeTest, or XLargeTest

  • External systems warning: Guidance when medium tests use Docker/testcontainers (#119, #133)

  • Centralized error registry: Consistent error codes with actionable remediation (#134)

  • Performance benchmarks: Validated zero-overhead claims (<1% impact) (#127, #135)

Infrastructure

  • World-class CI/CD with automated PyPI publishing (#21)

  • Python 3.11, 3.12, 3.13, 3.14 support

  • 100% test coverage enforcement

  • Security audit completed (#136)

Changed

  • Plugin architecture refactored to hexagonal/ports-and-adapters pattern (#60)

  • TestSize enum moved to dedicated types module

Breaking Changes

  • The plugin now requires session-specific state management

  • ViolationsSummary.hermeticity changed from int to HermeticityViolationsSummary object with per-type breakdown

v0.7.0 (2025-11-29)

Added

  • Add sleep blocking for small tests (#118)

  • Add configurable time limits for test size categories (#117)

  • Add JSON report export for CI integration (#116)

Fixed

  • Add Python 3.14 to release workflow test matrix

v0.6.0 (2025-11-28)

Fixed

  • Add shell: bash to Verify plugin registration step

  • Update version to 0.6.0 in init.py

  • Recategorize pytester tests from small to medium (#99)

v0.5.0 (2025-11-28)

Initial public release with core functionality.

v0.4.0 (2025-11-27)

Added

  • Network blocking integration with pytest hooks (#76)

  • NetworkBlockerPort adapters for network isolation (#74)

  • NetworkBlockerPort interface for network isolation (#72)

  • CI/CD infrastructure with automated PyPI publishing (#21)

  • Test distribution validation and statistics tracking

  • Timing validation for test categories

  • Warning for tests without size markers

  • Error for multiple size markers in tests

  • LARGE and XLARGE test size categories

  • Basic pytest plugin for test timing constraints

Fixed

  • Remove auto-approve step from dependabot workflow (#33)

  • Remove conflicting CodeQL workflow (#31)

Changed

  • Convert plugin.py to pure orchestration layer (#60)

  • Move TestSize enum to types module