Skip to main content

Simple pytest fixtures for Docker and docker-compose based tests

Project description

Docker-based integration tests

PyPI version Python versions Code style


Simple pytest fixtures that help you write integration tests with Docker and docker-compose. Specify all necessary containers in a docker-compose.yml file and and pytest-docker will spin them up for the duration of your tests.

This package is tested with Python versions 3.5, 3.6, 3.7 and 3.8 and pytest version 5. Python 2 is not supported.

pytest-docker was originally created by André Caron.


Here is an example of a test that depends on a HTTP service.

With a docker-compose.yml file like this (using the httpbin service):

version: '2'
    image: "kennethreitz/httpbin"
      - "8000:80"

You can write a test like this:

import pytest
import requests

from requests.exceptions import ConnectionError

def is_responsive(url):
        response = requests.get(url)
        if response.status_code == 200:
            return True
    except ConnectionError:
        return False

def http_service(docker_ip, docker_services):
    """Ensure that HTTP service is up and responsive."""

    # `port_for` takes a container port and returns the corresponding host port
    port = docker_services.port_for("httpbin", 80)
    url = "http://{}:{}".format(docker_ip, port)
        timeout=30.0, pause=0.1, check=lambda: is_responsive(url)
    return url

def test_status_code(http_service):
    status = 418
    response = requests.get(http_service + "/status/{}".format(status))

    assert response.status_code == status

By default this plugin will try to open docker-compose.yml in your tests directory. If you need to use a custom location, override the docker_compose_file fixture inside your file:

import os
import pytest

def docker_compose_file(pytestconfig):
    return os.path.join(str(pytestconfig.rootdir), "mycustomdir", "docker-compose.yml")

Available fixtures

All fixtures have session scope.


Determine the IP address for TCP connections to Docker containers.


Get an absolute path to the docker-compose.yml file. Override this fixture in your tests if you need a custom location.


Generate a project name using the current process PID. Override this fixture in your tests if you need a particular project name.


Start all services from the docker compose file (docker-compose up). After test are finished, shutdown all services (docker-compose down).


This pytest plug-in and its source code are made available to you under a MIT license. It is safe to use in commercial and closed-source applications. Read the license for details!

Found a bug? Think a new feature would make this plug-in more practical? We welcome issues and pull requests!

When creating a pull request, be sure to follow this projects conventions - use black with default settings for formatting, run tests with python test and make sure that all checks are passing.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for pytest-docker, version 0.7.1
Filename, size File type Python version Upload date Hashes
Filename, size pytest_docker-0.7.1-py3-none-any.whl (6.2 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size pytest-docker-0.7.1.tar.gz (5.1 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page