Skip to main content

Property-based smoke testing for ASGI application routes

Project description

pytest-routes

PyPI Python Version License

Property-based smoke testing for ASGI application routes.

Overview

pytest-routes automatically discovers routes from your ASGI application and performs randomized smoke testing using Hypothesis. It works with any ASGI framework, with first-class support for Litestar.

Key Features

  • Automatic Route Discovery - Extracts routes directly from your ASGI app
  • Property-Based Testing - Uses Hypothesis to generate diverse test inputs
  • Framework Agnostic - Works with Litestar, FastAPI, Starlette, and any ASGI app
  • Configurable - Filter routes, set examples per route, customize validation
  • Zero Config - Works out of the box with sensible defaults

Installation

# With pip
pip install pytest-routes

# With uv
uv add pytest-routes

# With framework extras
uv add "pytest-routes[litestar]"
uv add "pytest-routes[fastapi]"

Quick Start

# Run smoke tests on your ASGI app
pytest --routes --routes-app myapp:app

# With options
pytest --routes --routes-app myapp:app --routes-max-examples 50

Or define your app as a fixture:

# conftest.py
import pytest
from myapp import create_app

@pytest.fixture(scope="session")
def app():
    return create_app()
pytest --routes

Configuration

CLI Options

Option Description Default
--routes Enable route smoke testing False
--routes-app Import path to ASGI app -
--routes-max-examples Max Hypothesis examples per route 100
--routes-exclude Comma-separated patterns to exclude /health,/metrics,...
--routes-include Comma-separated patterns to include -
--routes-methods HTTP methods to test GET,POST,PUT,PATCH,DELETE
--routes-seed Random seed for reproducibility -

pyproject.toml

[tool.pytest-routes]
app = "myapp:app"
max_examples = 100
exclude = ["/health", "/metrics", "/docs"]
methods = ["GET", "POST"]

Supported Frameworks

Framework Status Notes
Litestar First-class Full type extraction
FastAPI Supported Via Starlette
Starlette Supported Base ASGI support

How It Works

  1. Discovery - Extracts routes from your ASGI app using framework-specific extractors
  2. Generation - Creates Hypothesis strategies based on route parameter types
  3. Execution - Runs property-based tests against each route
  4. Validation - Checks responses meet smoke test criteria (no 5xx, etc.)

Documentation

Full documentation available at jacobcoffee.github.io/pytest-routes

License

MIT License - see LICENSE

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytest_routes-0.4.0.tar.gz (83.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pytest_routes-0.4.0-py3-none-any.whl (102.1 kB view details)

Uploaded Python 3

File details

Details for the file pytest_routes-0.4.0.tar.gz.

File metadata

  • Download URL: pytest_routes-0.4.0.tar.gz
  • Upload date:
  • Size: 83.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pytest_routes-0.4.0.tar.gz
Algorithm Hash digest
SHA256 976638d2e89f886993d613c2c34aede773e9ce90eda96792e629dd64c3b76587
MD5 dfdf09fcae18dcb9bb7c46daf8abb9e1
BLAKE2b-256 7c1a58a88b1ac290ec5715f19ce2a17078e78744c00b9f24182c84a3b9560dd0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytest_routes-0.4.0.tar.gz:

Publisher: publish.yml on JacobCoffee/pytest-routes

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pytest_routes-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: pytest_routes-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 102.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pytest_routes-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bb4deb5890e4ee2bc4890b38d94b9a0a0a217554914424427e3bb3dba8f22014
MD5 f9af0476e4d7a0a6be71917bba6e8ef3
BLAKE2b-256 c082221e8f1e8f7546725afb83d2a0b9c2ecf2eb6bf9cefd5b53ac38d1ee06ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytest_routes-0.4.0-py3-none-any.whl:

Publisher: publish.yml on JacobCoffee/pytest-routes

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page