Simple pytest fixtures for Docker and docker-compose based tests
Project description
Docker-based integration tests
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
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-0.7.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 686a1098d41e0a56c4b38e76180170726ce65bac5bebba4c11244ece218dd7ba |
|
MD5 | aad42a8f15233356351ffe01db02277e |
|
BLAKE2b-256 | 1ca05a19397b742eb815076720e86dbaab98e91718f58c6ae133cc2e75cf8db2 |