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.

codecov PyPI version

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

Pytest Command-Line Options

All options can also be provided directly on the pytest command line:

pytest --templates-path=tests/templates \
    --db-url=mongodb://localhost:27017 \
    --db-name=test_db

These flags mirror the environment and config settings shown above, making it easy to override values per run.

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.2.1.tar.gz (5.0 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.2.1-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: pytest_scenarios-0.2.1.tar.gz
  • Upload date:
  • Size: 5.0 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.2.1.tar.gz
Algorithm Hash digest
SHA256 2ab58da532d95e811fc678fa7473642593e43558f5017aa6a5dc78de24c2271e
MD5 9a1d0fc4eb236366443eaba80a3c2cfe
BLAKE2b-256 6ef1615f34d8c1fa3a381eb13b5f1f52748d3b5a246e31356169ec57a1ffb887

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytest_scenarios-0.2.1.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.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_scenarios-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 23f479652686838a710994862460f2cfa78722b8b2e4dcd757312cd899ae4f5c
MD5 dc9cda6c18f8bce574e6e7078237da38
BLAKE2b-256 847cb4a73733777790b6d41eb4668a15e4e927ef73fda69b0851690423518574

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytest_scenarios-0.2.1-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