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
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:
- Configure your database and templates path as shown above.
- Create your templates in the configured templates-path.
- 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ab58da532d95e811fc678fa7473642593e43558f5017aa6a5dc78de24c2271e
|
|
| MD5 |
9a1d0fc4eb236366443eaba80a3c2cfe
|
|
| BLAKE2b-256 |
6ef1615f34d8c1fa3a381eb13b5f1f52748d3b5a246e31356169ec57a1ffb887
|
Provenance
The following attestation bundles were made for pytest_scenarios-0.2.1.tar.gz:
Publisher:
release.yaml on carlosvin/pytest-scenarios
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pytest_scenarios-0.2.1.tar.gz -
Subject digest:
2ab58da532d95e811fc678fa7473642593e43558f5017aa6a5dc78de24c2271e - Sigstore transparency entry: 787322048
- Sigstore integration time:
-
Permalink:
carlosvin/pytest-scenarios@1a6ca9c020764a8babd6346050e2fbd8861ddb3d -
Branch / Tag:
refs/heads/main - Owner: https://github.com/carlosvin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@1a6ca9c020764a8babd6346050e2fbd8861ddb3d -
Trigger Event:
pull_request
-
Statement type:
File details
Details for the file pytest_scenarios-0.2.1-py3-none-any.whl.
File metadata
- Download URL: pytest_scenarios-0.2.1-py3-none-any.whl
- Upload date:
- Size: 6.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23f479652686838a710994862460f2cfa78722b8b2e4dcd757312cd899ae4f5c
|
|
| MD5 |
dc9cda6c18f8bce574e6e7078237da38
|
|
| BLAKE2b-256 |
847cb4a73733777790b6d41eb4668a15e4e927ef73fda69b0851690423518574
|
Provenance
The following attestation bundles were made for pytest_scenarios-0.2.1-py3-none-any.whl:
Publisher:
release.yaml on carlosvin/pytest-scenarios
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pytest_scenarios-0.2.1-py3-none-any.whl -
Subject digest:
23f479652686838a710994862460f2cfa78722b8b2e4dcd757312cd899ae4f5c - Sigstore transparency entry: 787322059
- Sigstore integration time:
-
Permalink:
carlosvin/pytest-scenarios@1a6ca9c020764a8babd6346050e2fbd8861ddb3d -
Branch / Tag:
refs/heads/main - Owner: https://github.com/carlosvin
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yaml@1a6ca9c020764a8babd6346050e2fbd8861ddb3d -
Trigger Event:
pull_request
-
Statement type: