Skip to main content

pytest sqlalchemy plugin for mock

Project description

pytest-sqlalchemy-mock

PyPI version codecov CI Supported Python Version Code style: black

This plugin provides pytest fixtures to create an in-memory DB instance on tests and dump your raw test data.

Supported Python versions

Python 3.12 or later highly recommended but also might work on Python 3.11.

Installation

Download from PyPI

pip install pytest-sqlalchemy-mock

Building from source

At the top direcotry,

python3 -m build
python3 -m pip install dist/pytest_sqlalchemy_mock-*.whl

or

python3 -m pip install .

Uninstall

python3 -m pip uninstall pytest_sqlalchemy_mock

Usage

Let's assume you have a SQLAlchemy declarative base and some models with it.

models.py

from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import declarative_base

Base = declarative_base()


class User(Base):
    __tablename__ = "user"

    id = Column(Integer, primary_key=True)
    name = Column(String)

Firstly SQLAlchemy base class which is used for declare models should be passed with sqlalchemy_declarative_base fixture in conftest.py

conftest.py

@pytest.fixture(scope="function")
def sqlalchemy_declarative_base():
    return Base

Then in test functions you can use mocked_session fixture to make query in mocked DB.

test_user_table.py

def test_mocked_session_user_table(mocked_session):
    user_data = mocked_session.execute("SELECT * from user;").all()
    assert user_data == []

Also, you can dump your mock data to DB before start testing via sqlalchemy_mock_config fixture like following.

conftest.py

@pytest.fixture(scope="function")
def sqlalchemy_mock_config():
    return [("user", [
        {
            "id": 1,
            "name": "Kevin"
        },
        {
            "id": 2,
            "name": "Dwight"
        }
    ])]

test_user_table.py

def test_mocked_session_user_class(mocked_session):
    user = mocked_session.query(User).filter_by(id=2).first()
    assert user.name == "Dwight"

Upcoming Features

  • Mock with decorator for specific DB states for specific cases.
  • Support to load data from .json and .csv
  • Async SQLAlchemy support

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_sqlalchemy_mock-0.1.7.tar.gz (4.9 kB view details)

Uploaded Source

Built Distribution

pytest_sqlalchemy_mock-0.1.7-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file pytest_sqlalchemy_mock-0.1.7.tar.gz.

File metadata

File hashes

Hashes for pytest_sqlalchemy_mock-0.1.7.tar.gz
Algorithm Hash digest
SHA256 516637fcdaf7c88687ea21a8c1f3649da50da7e32f6743e10dbc13cb9fb5e46e
MD5 c6d823f317ca8c60aa613dadd201d31a
BLAKE2b-256 f7bc5e9dde88932fcd6f84ca2c9dbfcc5c5d24749c109e5d27f7fff43d7f00e1

See more details on using hashes here.

File details

Details for the file pytest_sqlalchemy_mock-0.1.7-py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_sqlalchemy_mock-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 1173d3149f21ce779aac10e2de0e8b7a8fe4b065ea4196463e2f88b75a6a0558
MD5 a2b833090b338ab59563b7d6b6b7fa78
BLAKE2b-256 80be1de595c8a9fb4307012c5ee26118f8d5fdb1004345443d232ebadabb7512

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page