Skip to main content

Add your description here

Project description

Test Scenarios

Test Scenarios is a Python library designed to make integration testing with MongoDB effortless and maintainable. It enables you to define reusable data templates and quickly build test scenarios, so you can focus on writing meaningful tests instead of boilerplate setup code.

Why use Test Scenarios?

  • Rapid scenario creation: Define templates once, reuse them across tests, and override only what you need.
  • Consistent test data: Ensure your integration tests always start with predictable, isolated data.
  • Flexible configuration: Use environment variables or pytest config files to adapt to any project setup.
  • Seamless pytest integration: Built for pytest, with fixtures and helpers ready to use.
  • Clean and readable tests: Keep your test code focused on logic, not data plumbing.

Installation

Install with pip:

pip install pytest-scenarios

Or with uv:

uv add pytest-scenarios --dev

Or with Poetry:

poetry add pytest-scenarios --group dev

What are templates?

Templates are Python dictionaries representing MongoDB documents with default values. Each template module matches a MongoDB collection.

See tests/templates for examples like customers, orders, and products.

Example template:

# tests/templates/orders.py

# Each template should be assigned to a `TEMPLATE` var
TEMPLATE = {
    "id": "123456789abcdef01234567",
    "customer_id": "customer_001",
    "items": [
        {"product_id": "product_001", "quantity": 2, "price": 19.99},
        {"product_id": "product_002", "quantity": 1, "price": 9.99},
    ],
    "tax": 0.15,
}

Configuration

Configure the library using environment variables or pytest config files.

MongoDB Connection

Set your MongoDB URI and database name:

# Environment variables
DB_URL=mongodb://localhost:27017
DB_NAME=test_db

Or in pyproject.toml:

[tool.pytest.ini_options]
db-url="mongodb://localhost:27017"
db-name="test_db"

Or in pytest.ini:

[pytest]
db-url=mongodb://localhost:27017
db-name=test_db

Templates Path

Specify where your templates live:

# Environment variable
TEMPLATES_PATH=tests/templates

Or in config files:

[tool.pytest.ini_options]
templates-path="tests/templates"
[pytest]
templates-path=tests/templates

Quickstart

Get started in three steps:

  1. Configure your database and templates path as shown above.
  2. Create your templates in the configured templates-path.
  3. Write your test using the scenario builder fixture:
def test_example(
    scenario_builder: ScenarioBuilder, db: Database
):
    """
    Test that the scenario is created correctly.
    This example creates 2 customers and 2 orders, overriding template values.
    """
    inserted_ids_by_collection = scenario_builder.create(
        {
            "customers": [
                {"name": "Alice", "status": "inactive", "email": "alice@test.com"},
                {"name": "Louis", "age": 25, "email": "louis@test.com"},
            ],
            "orders": [
                {
                    "id": "order_001",
                    "items": [
                        {"price": 19.99, "product_id": "book_123", "quantity": 1}
                    ],
                },
                {
                    "id": "order_002",
                    "items": None,
                    "tax": 0.2,
                },
            ],
        }
    )
    for collection_name, inserted_ids in inserted_ids_by_collection:
        assert len(inserted_ids) == 2, collection_name

Check out generated documents in:

Example Use Cases

  • Integration tests for APIs and services using MongoDB
  • End-to-end tests requiring complex, multi-collection data setups
  • Rapid prototyping of test data for new features

Contributing

Contributions welcome. Please add tests for new features and follow the project's coding standards.

License

MIT

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_scenarios-0.0.5.tar.gz (4.3 kB view details)

Uploaded Source

Built Distribution

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

pytest_scenarios-0.0.5-py3-none-any.whl (5.9 kB view details)

Uploaded Python 3

File details

Details for the file pytest_scenarios-0.0.5.tar.gz.

File metadata

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

File hashes

Hashes for pytest_scenarios-0.0.5.tar.gz
Algorithm Hash digest
SHA256 3c5eafa7410f2ce8bf615b1c5a65271ed61ab655deebf011ac6f2c8ef752d512
MD5 ea938534983631386f8e7d8fb71a72df
BLAKE2b-256 6d45eaa2bca6690a6663d2e052aaac819d77663c60dc31f3ebf0a0c44c17f03a

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytest_scenarios-0.0.5.tar.gz:

Publisher: release.yaml on carlosvin/pytest-scenarios

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_scenarios-0.0.5-py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_scenarios-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 906722ce901b5b102a00f9766b498d6f773ce0b94737062143510b05d9a524ed
MD5 b1c07f6fa329db6bffd3a23f52ae6a83
BLAKE2b-256 8ff1458e42ba367bdd65edbd778eba761808fcf20cec62df986e0b83c94fff47

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytest_scenarios-0.0.5-py3-none-any.whl:

Publisher: release.yaml on carlosvin/pytest-scenarios

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