Skip to main content
Archived

This project has been archived by its maintainers, and is no longer receiving any updates.

pytest-mg

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 --replSet enabled for change stream support
  • Session-scoped — One container per test session, shared across all tests

Installation

pip install pytest-mg

Requirements

  • Python 3.10+
  • pytest 8.0+
  • docker 7.0+
  • Docker daemon running locally or accessible via DOCKER_HOST environment variable

Usage

Basic Example

The plugin automatically registers fixtures when installed. Import the Mongo type for type hints:

import pymongo
import pytest_mg


def test_pymongo(mongo: pytest_mg.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_mg


@pytest.fixture(scope="session", autouse=True)
def init_env(mongo_6: pytest_mg.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_mg


@pytest.mark.asyncio
async def test_motor(mongo: pytest_mg.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:

  1. Pull the specified MongoDB image (if not already cached)
  2. Allocate an unused local port
  3. Create a container with data directory mounted to tmpfs
  4. Start the container and wait for MongoDB to be ready
  5. Yield the Mongo object with connection details
  6. Kill and remove the container after all tests complete

Release files for pytest-mg 0.0.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pytest-mg 0.0.9
File Size Uploaded
pytest_mg-0.0.9.tar.gz 10.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pytest-mg 0.0.9
File Interpreter ABI Platform
pytest_mg-0.0.9-py3-none-any.whl Python 3 none any Details

Total release size: 18.4 kB

Release files / pytest_mg-0.0.9.tar.gz

Download URL pytest_mg-0.0.9.tar.gz
Size 10.4 kB
Tags Source
SHA-256 checksum
How to use checksums
37b2efc794add658b072cbc6526d50eafa57e5cbcafffbb6ebdced4a235850b4
BLAKE2b-256 checksum
How to use checksums
d68df1bae6c9e98979fb1889873c6e898bb313c659b8448e9608bf25799654e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 11, 2026.

Transparency log

Release files / pytest_mg-0.0.9-py3-none-any.whl

Download URL pytest_mg-0.0.9-py3-none-any.whl
Size 7.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2c186a8dd68ed6175d5a128e812f36be530f65dc585b59efda06018776a94bad
BLAKE2b-256 checksum
How to use checksums
2416e055d29ab78fc1cf178e218a867d6d7b526e609d8c38f932ca73f3eb0438
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 11, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.0.9 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page