A tiny plugin for pytest which runs MongoDB in Docker
Project description
pytest-mongo-docker
A pytest plugin that provides session-scoped MongoDB fixtures backed by Docker containers.
Features
- Zero configuration — Fixtures work out of the box, no setup required
- Automatic lifecycle management — Pulls images, allocates ports, starts containers, and cleans up after tests
- Fast — Data directory mounted to tmpfs for maximum speed
- Version-specific fixtures — Test against MongoDB 5, 6, 7, 8, or latest
- Replica set fixtures — Drop-in variants with
--replSetenabled for change stream support - Session-scoped — One container per test session, shared across all tests
Installation
pip install pytest-mongo-docker
Requirements
- Python 3.9+
- pytest 7.4+
- docker 7.0+
- Docker daemon running locally or accessible via
DOCKER_HOSTenvironment variable
Usage
Basic Example
The plugin automatically registers fixtures when installed. Import the Mongo type for type hints:
import pymongo
import pytest_mongo_docker
def test_pymongo(mongo: pytest_mongo_docker.Mongo):
client = pymongo.MongoClient(host=mongo.host, port=mongo.port)
db = client["test_db"]
collection = db["test_collection"]
collection.insert_one({"key": "value"})
doc = collection.find_one({"key": "value"})
assert doc["key"] == "value"
client.close()
Available Fixtures
All fixtures are session-scoped and return a Mongo object with host and port attributes:
Standalone (default):
mongo— Latest MongoDB version (mongo:latest)mongo_5— MongoDB 5.x (mongo:5)mongo_6— MongoDB 6.x (mongo:6)mongo_7— MongoDB 7.x (mongo:7)mongo_8— MongoDB 8.x (mongo:8)
Replica set (required for change streams and transactions):
mongo_rs— Latest MongoDB version (mongo:latest)mongo_5_rs— MongoDB 5.x (mongo:5)mongo_6_rs— MongoDB 6.x (mongo:6)mongo_7_rs— MongoDB 7.x (mongo:7)mongo_8_rs— MongoDB 8.x (mongo:8)
Replica set fixtures require pymongo (pip install pymongo) and start MongoDB with --replSet rs0. When connecting, use directConnection=True to avoid topology-discovery issues from the Docker port mapping:
client = pymongo.MongoClient(
f"mongodb://{mongo_6_rs.host}:{mongo_6_rs.port}/",
directConnection=True,
)
Advanced Example: Configuring Environment Variables
Use session-scoped autouse fixtures to configure your application before tests run:
import os
import pytest
import pytest_mongo_docker
@pytest.fixture(scope="session", autouse=True)
def init_env(mongo_6: pytest_mongo_docker.Mongo) -> None:
os.environ["MONGODB_CONNECTION_STRING"] = f"{mongo_6.host}:{mongo_6.port}"
os.environ["MONGODB_DBNAME"] = "myapp"
def test_app():
# Your application reads from environment variables,
# no need to reference the fixture directly
pass
Using with Motor (async)
import motor.motor_asyncio
import pytest
import pytest_mongo_docker
@pytest.mark.asyncio
async def test_motor(mongo: pytest_mongo_docker.Mongo):
client = motor.motor_asyncio.AsyncIOMotorClient(host=mongo.host, port=mongo.port)
db = client["test_db"]
collection = db["test_collection"]
await collection.insert_one({"key": "value"})
doc = await collection.find_one({"key": "value"})
assert doc["key"] == "value"
client.close()
How It Works
The plugin uses Docker's Python API to:
- Pull the specified MongoDB image (if not already cached)
- Allocate an unused local port
- Create a container with data directory mounted to tmpfs
- Start the container and wait for MongoDB to be ready
- Yield the
Mongoobject with connection details - Kill and remove the container after all tests complete
v0.0.5 (2026-03-04)
- Added replica set fixtures (
mongo_rs,mongo_5_rs–mongo_8_rs) for change stream support - Added pymongo as a dev dependency for readiness checking and replica set initialisation
v0.0.1 (2026-02-11)
- A first version
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
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_mongo_docker-0.0.5.tar.gz.
File metadata
- Download URL: pytest_mongo_docker-0.0.5.tar.gz
- Upload date:
- Size: 7.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac048117e03183bee5012010b7780c82fc8616e2b31175923bc777934aaf1557
|
|
| MD5 |
aa21c652ffce1462607ce2f7de8f320f
|
|
| BLAKE2b-256 |
29b6f74fb9f0f150055cc20ba04598ee0420f053f6d942b4f95b8d42212694b3
|
File details
Details for the file pytest_mongo_docker-0.0.5-py3-none-any.whl.
File metadata
- Download URL: pytest_mongo_docker-0.0.5-py3-none-any.whl
- Upload date:
- Size: 7.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e735bb7b7d1eb5b9e137a80fd669dfe8112d38e315d2e7300dbdb5087649dff7
|
|
| MD5 |
38c5e0fbb7b0846757a74cbbab04bc99
|
|
| BLAKE2b-256 |
06a7c5cc66dbf3944e3dd72833603ed49cfeef7ec221bb3d57472b20729ab977
|