Skip to main content

No project description provided

Project description

This package contains test fixtures and resources that bring up an isolated database and SQLAlchemy test fixtures, so that your Python unit tests will run without interfering with each other when you are using the SQLAlchemy ORM.

The database is initialised once at the start of a test process run, as is the session fixture. The session fixture ensures that any commits do not permanently commit, and rolls back the database to a clean state after each test completes.

Requirements

Python3.7 and beyond should work.

Quickstart

Install with pip:

pip install db-testtools

Example base test class:

class DBTestCase(testresources.ResourcedTestCase, testtools.TestCase):
    """Base class for all DB tests.

   Brings up a temporary database and gives each test its own session.
   """

   # These are resources that stay active for the entire
   # duration of all the tests being run.
   db_fixture = DatabaseResource(
       ModelBase,
       'myproject.models',
       future=True,
   )
   resources = [('database', db_fixture)]

   def setUp(self):
       super().setUp()

       self.session_fixture = SessionFixture(self.database, future=True)
       self.useFixture(self.session_fixture)
       # The session itself.
       self.session = self.session_fixture.session
       # The session factory.
       self.Session = self.session_fixture.Session

This base test class will start a SQLite-based database by default and inject self.session as the SQLAlchemy session and self.Session as the SQLAlchemy session factory.

If you need to use a different database, then you can either:
  • pass the engine_fixture_name parameter to DatabaseResource

  • set an environment variable TEST_ENGINE_FIXTURE

with the name of the engine fixture to use. Currently two are available:

  • SqliteMemoryFixture

  • PostgresContainerFixture

Engine drivers

Currently the two drivers mentioned above are implemented. The SQLite fixture implements a simple in-memory database which is completely dropped and re-instated on every test.

The PostgresContainerFixture starts its own Postgres instance in a local Docker container. Therefore you must have Docker installed before using this fixture.

Help needed!

This fixture suite is currently not tested itself and would benefit from anyone willing to contribute some unit tests.However, iIt has been in use daily on a large project at Cisco for the last 2 years, and is very stable.

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

db-testtools-2021.10.27.tar.gz (13.6 kB view details)

Uploaded Source

Built Distribution

db_testtools-2021.10.27-py2.py3-none-any.whl (14.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file db-testtools-2021.10.27.tar.gz.

File metadata

  • Download URL: db-testtools-2021.10.27.tar.gz
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for db-testtools-2021.10.27.tar.gz
Algorithm Hash digest
SHA256 5d3cc6a4a11cdc49313997684f8716f689aff4bf39f69aefbe24512a97a7d7b4
MD5 a67f947bbd44e7377d41a0648aebec72
BLAKE2b-256 14de665515d253bd6a23fee189c8c65f8f4095b554d7f46cc35cc63b67b5db7e

See more details on using hashes here.

File details

Details for the file db_testtools-2021.10.27-py2.py3-none-any.whl.

File metadata

  • Download URL: db_testtools-2021.10.27-py2.py3-none-any.whl
  • Upload date:
  • Size: 14.9 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for db_testtools-2021.10.27-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 98a82af30947d7351d53d6e0e897b59074c4e6a5c8e9e6394728b6e9421b9174
MD5 1b92c009861d3e676fb35449555b2637
BLAKE2b-256 e2e5daa46b9a3e64948d9dda7b553b3807a0fe9c5519314dcad0180ead78d19f

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