Skip to main content

Docker-based integration tests

Project description

Description

Simple py.test fixtures for writing integration tests based on Docker containers. Specify all containers you need and pytest-docker will use Docker Compose to spin them up for the duration of your test suite.

Usage

Here is the basic recipe for writing a test that depends on a service that responds over HTTP:

import pytest
import requests

from requests.exceptions import (
    ConnectionError,
)

def is_responsive(url):
    """Check if something responds to ``url``."""
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return True
    except ConnectionError:
        return False

@pytest.fixture(scope='session')
def some_http_service(docker_ip, docker_services):
    """Ensure that "some service" is up and responsive."""
    url = 'http://' % (
        docker_ip,
        docker_services.port_for('abc', 123),
    )
    docker_services.wait_until_responsive(
       timeout=30.0, pause=0.1,
       check=lambda: is_responsive(url)
    )
    return url

def test_something(some_service):
    """Sample test."""
    response = requests.get(some_service)
    response.raise_for_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 pytest

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

You can allow this plugin to run your tests when Docker is not available. It will use the container port and localhost instead:

@pytest.fixture(scope='session')
def docker_allow_fallback():
    return True

Changelog

Version 0.3.0

  • Added --build option to docker-compose up command to automatically rebuild local containers.

Contributing

This py.test plug-in and its source code are made available to your under and 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? No one is paid to support this software, but we welcome pull requests!

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.5.0.tar.gz (4.0 kB view details)

Uploaded Source

Built Distributions

pytest_docker-0.5.0-py3-none-any.whl (4.5 kB view details)

Uploaded Python 3

pytest_docker-0.5.0-py2-none-any.whl (4.5 kB view details)

Uploaded Python 2

File details

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

File metadata

File hashes

Hashes for pytest-docker-0.5.0.tar.gz
Algorithm Hash digest
SHA256 190e11a8eb679fae3678fb9128e7340c4193711f4fd01fae6689bc173464680a
MD5 b08aca42a557f79e6441c46490febccc
BLAKE2b-256 3d95e85696a18cb58100d8e415ba24311f4e43d7effe90ca573d57b699d4427d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pytest_docker-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 de15d8628b0375d0bb5a40894a83730c7d8590fb367a49f90732cc53f961f8f8
MD5 d8dfc07884a6ac603864a2cd821e4e05
BLAKE2b-256 d286a48f442acc8c5e6435417f00d2191c7efab1e99cb7fcd7b8f04675ac204e

See more details on using hashes here.

File details

Details for the file pytest_docker-0.5.0-py2-none-any.whl.

File metadata

File hashes

Hashes for pytest_docker-0.5.0-py2-none-any.whl
Algorithm Hash digest
SHA256 66d0d98a3229d95466453e2db730de2f159f3efeba1fd012f8d58707e69ffc49
MD5 50ebc2c6eb52f730a2295199ae03682f
BLAKE2b-256 8fe0057d0f0f59d768fd086c5ae1290c05f5dda41579d640663e6bc833bcc25b

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