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

Description

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.

Usage

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'
services:
  httpbin:
    image: "kennethreitz/httpbin"
    ports:
      - "8000:80"

You can write a test like this:

import pytest
import requests

from requests.exceptions import ConnectionError


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


@pytest.fixture(scope="session")
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)
    docker_services.wait_until_responsive(
        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 conftest.py file:

import os
import pytest


@pytest.fixture(scope="session")
def docker_compose_file(pytestconfig):
    return os.path.join(str(pytestconfig.rootdir), "mycustomdir", "docker-compose.yml")

Available fixtures

All fixtures have session scope.

docker_ip

Determine the IP address for TCP connections to Docker containers.

docker_compose_file

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

docker_compose_project_name

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

docker_services

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

Contributing

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 setup.py 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.

Source Distribution

pytest-docker-0.7.1.tar.gz (5.1 kB view details)

Uploaded Source

Built Distribution

pytest_docker-0.7.1-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file pytest-docker-0.7.1.tar.gz.

File metadata

  • Download URL: pytest-docker-0.7.1.tar.gz
  • Upload date:
  • Size: 5.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.1.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.7.1

File hashes

Hashes for pytest-docker-0.7.1.tar.gz
Algorithm Hash digest
SHA256 3790971f2c4bf612a969a291f24bedf7603a62133d95cfd1b250e712fa380cd1
MD5 b1b3f74bfbb9fedf1ebe8c7e5f951090
BLAKE2b-256 7ce54d872778aa8fa0015a1b5a5d66207ae98d85ab06289c46b43723be9edb73

See more details on using hashes here.

File details

Details for the file pytest_docker-0.7.1-py3-none-any.whl.

File metadata

  • Download URL: pytest_docker-0.7.1-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.1.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.7.1

File hashes

Hashes for pytest_docker-0.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 686a1098d41e0a56c4b38e76180170726ce65bac5bebba4c11244ece218dd7ba
MD5 aad42a8f15233356351ffe01db02277e
BLAKE2b-256 1ca05a19397b742eb815076720e86dbaab98e91718f58c6ae133cc2e75cf8db2

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