A plugin to use docker databases for pytests
Project description
A plugin to use docker databases for pytests
This Pytest plugin was generated with Cookiecutter along with @hackebrot’s Cookiecutter-pytest-plugin template.
What is this?
This is a pytest plugin that hooks into the host’s docker
daemon to create and teardown containers within the pytest
life cycle.
Features
Use custom
Dockerfile
s or base images from DockerhubUse
volumes
to persist test data in between testing sessionsSpecify what port you want the container to be listening on the host machine and the container
Optionally persist the container between test sessions
Name the containers created
Requirements
docker-py>=1.10.6
pytest>=3.3.2
docker
Installation
You can install “pytest-docker-db” via pip from PyPI:
$ pip install pytest-docker-db
Configuration
db-volume-args
Provide the “-v” arguments that you would pass to the “docker run” command if you were using the cli. If you need multiple volumes mounted separate them with commas.
The basic syntax is
/host/vol/path:/path/in/container:rw
. If using a named volume, the syntax would bevol-name:/path/in/container:rw
‘For more information please visit the docker documentation’
db-image
Specify the name of the image to use as the DB.
Must be in the form of
"image_name":"tag"
.
db-name
Specify the name of the container. If this is not specified a random container name will be used with the prefix
docker-db
db-host-port
Specify the port that the db should be listening to on the host machine.
db-port
Specify the port that the db should be listening to in the container. This is often the default port used by your database.
db-persist-container
If set, the container created will not be torn down after the test suite has ran. By default any image created will be torn down and removed after the test suite has finished.
db-dockerfile
Specify the name of the Dockerfile within the directory set as the
db-build-context
If a path is given as well as an image name, the Dockerfile will be used.
db-docker-context
The directory to use as the docker build context.
Usage
- Plugin contains one fixture:
docker_db - it’s a session scoped fixture that returns a docker-py container object. For almost all use cases the user will not care about this object.
The recommended way to use this fixture is to create an autouse=True
fixture in your conftest.py
file
to automatically invoke the setup of the containers.
@pytest.fixture(scope='session', autouse=True) def my_docker_db(docker_db): pass
Can be configured via the pytest
CLI or the pytest.ini
file.
pytest.ini:
[pytest] db-volume-args=/home/kp/vol:/var/lib/postgresql/data:rw db-image=postgres:latest db-name=test-postgres db-port=5432 db-host-port=5434
pytest CLI using a Dockerhub image :
$ pytest --db-image=postgrest:latest --db-name=test-postgres --db-port=5432 --db-host-port=5434
pytest CLI using a custom image:
$ pytest --db-dockerfile=Dockerfile --db-name=test-postgres --db-port=5432 --db-host-port=5434
Contributing
Contributions are very welcome. Tests can be run with tox, please ensure the coverage at least stays the same before you submit a pull request.
License
Distributed under the terms of the MIT license, “pytest-docker-db” is free and open source software
Issues
If you encounter any problems, please file an issue along with a detailed description.
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
Hashes for pytest_docker_db-1.0.3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | df85288487f556ca562e8602ca1f6335d42fd0237e946f4e8f8515a726e1af92 |
|
MD5 | c283f883b455b29dae82e58873046119 |
|
BLAKE2b-256 | f77aa8aa8efd75b940c61e7a1db6967481e0153dc5859c19d91518f246cf6913 |