Run, manage and stop Docker Compose project from Docker API
pytest-dockerc is a plugin for pytest that provides support
for running test from Docker Compose project.
docker-compose up -d command is executed at the beginning of the
test session and the
docker-compose down command at the end. The main fixture
returns a compose.project.Project
to deal with the python docker API in your tests. Another fixture
dockerc_logs is provided to enable
the logs on stdout during your tests execution.
This plugin provides a way to use as far as possible the same environment for development, test, integration and production phases. You test and deploy the same artifact in order to avoid side effects in production.
pip install pytest-dockerc
Below a basic example, you can also refer to a full example with an http server.
├── docker-compose.yml └── tests ├── conftest.py └── test_example.py
version: "3.6" services: python: image: python:3-alpine
def test_example(dockerc): assert len(dockerc.containers()) == 1 container = dockerc.containers() assert container.is_running is True assert container.labels["com.docker.compose.service"] == "python"
Some options are available to update the default behavior of the plugin.
dockerc: --dockerc-norun disable the run and stop commands of docker-compose --dockerc-attach-network attach the pytest container to the docker-compose network,only if pytest is started inside a container --dockerc-filepath=DOCKERC_FILEPATH set the Compose file path --dockerc-projectdir=DOCKERC_PROJECTDIR set the working directory of the Compose project --dockerc-projectname=DOCKERC_PROJECTNAME set project name of the Compose project --dockerc-build build images before starting containers --dockerc-services=DOCKERC_SERVICES select services to run
Run tests without up and down command of docker-compose
Running the full docker-compose project can take time, if you loads several services. It is useful to run the test on a running instance. That method is recommended when you write a new test.
First start your docker compose like usual:
Then run your tests with the
--dockerc-norun, that will skip the
Below the docker-compose output after 2 runs of the test
which performs a GET request.
Creating network "pytest-dockerc_default" with the default driver Creating pytest-dockerc_http_1 ... done Attaching to pytest-dockerc_http_1 http_1 | 192.168.32.1 - - [24/Dec/2018:08:48:21 +0000] "GET / HTTP/1.1" 200 612 "-" "python-requests/2.20.0" "-" http_1 | 192.168.32.1 - - [24/Dec/2018:08:48:22 +0000] "GET / HTTP/1.1" 200 612 "-" "python-requests/2.20.0" "-"
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size pytest_dockerc-1.0.5-py3-none-any.whl (7.3 kB)||File type Wheel||Python version py3||Upload date||Hashes View hashes|
|Filename, size pytest-dockerc-1.0.5.tar.gz (7.8 kB)||File type Source||Python version None||Upload date||Hashes View hashes|
Hashes for pytest_dockerc-1.0.5-py3-none-any.whl