Skip to main content

No project description provided

Project description

Yellowbox

Test YellowBox Coverage

Yellowbox makes it easy to run docker containers as part of black box tests.

Documentation: https://yellowbox.readthedocs.io/


Examples

Say you want to run a blackbox test on a service that depends on a redis server.

from yellowbox.clients import docker_client
from yellowbox.extras import RedisService


def test_black_box():
  with docker_client() as docker_client, RedisService.run(docker_client) as redis:
    redis_port = redis.client_port()  # this the host port the redis
    ...  # run your black box test here
  # yellowbox will automatically close the service when exiting the scope


def test_black_box_with_initial_data():
  # you can use the service's built-in utility functions to
  # easily interoperate the service
  with docker_client() as docker_client,
          RedisService.run(docker_client) as redis,
          redis.client() as client:
    client.set("foo", "bar")
  ...

Supported Extras

The currently supported built-in services are:

  • Kafka: from yellowbox.extras import KafkaService
    • currently, the kafka service supports only plaintext protocol, and always binds to the host port 9092
  • Logstash: from yellowbox.extras import LogstashService
  • RabbitMQ: from yellowbox.extras import RabbitMQService
  • Redis: from yellowbox.extras import RedisService

Note: all these extras require additional dependencies as specified in the project's extras.

Networks

Yellowbox also makes it easy to set up temporary docker networks, so that different containers and services can communicate directly.

from yellowbox.clients import docker_client
from yellowbox import temp_network, connect
from yellowbox.extras import RabbitMQService


def test_network():
  with docker_client() as docker_client,
          RabbitMQService.run(docker_client) as rabbit,
          temp_network(docker_client) as network,
          connect(network, rabbit) as alias:
    # yellow's "connect" function connects between a network and a
    # Container/YellowService, retrieves the container's alias(es) on 
    # the network, and disconnects the two when done
    another_container = docker_client.containers.create("my-image",
                                                        environment={"RABBITMQ_HOSTNAME": alias[0]}
                                                        )
    with connect(network, another_container):
      another_container.start()
      another_container.wait()

As Pytest Fixtures

Both yellow services and networks can be used fluently with pytest fixures

from yellowbox.clients import docker_client
from pytest import fixture

from yellowbox.extras import RedisService


@fixture
def docker_client():
  with docker_client() as ret:
    yield ret


@fixture
def redis_service(docker_client):
  with RedisService.run(docker_client) as service:
    yield service


def black_box(redis_service):
  # run your test with the redis service provided
  ...

since docker container may take some time to set up, it's advisable to set their scope to at least "module"


Extending Yellow

Users can create their own Yellow Service classes by implementing the YellowService abstract class. If the service encapsulates only a single container, the SingleContainerService class already implements the necessary methods.


License

Yellowbox is registered under the MIT public license

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

yellowbox-0.6.9.tar.gz (43.4 kB view details)

Uploaded Source

Built Distribution

yellowbox-0.6.9-py3-none-any.whl (53.4 kB view details)

Uploaded Python 3

File details

Details for the file yellowbox-0.6.9.tar.gz.

File metadata

  • Download URL: yellowbox-0.6.9.tar.gz
  • Upload date:
  • Size: 43.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.12 CPython/3.8.12 Linux/5.11.0-1025-azure

File hashes

Hashes for yellowbox-0.6.9.tar.gz
Algorithm Hash digest
SHA256 6ec3d329ec6348791146e368b0be857b71b2f5955f569c91fbfa5b82b2f64ae1
MD5 f0b0053fd3a29dbc432a10cc63950f35
BLAKE2b-256 a9a91c96f72e37f6292838fde22b3dbe8fa08c33d5f3a9e86c5ff0b79e862cde

See more details on using hashes here.

File details

Details for the file yellowbox-0.6.9-py3-none-any.whl.

File metadata

  • Download URL: yellowbox-0.6.9-py3-none-any.whl
  • Upload date:
  • Size: 53.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.12 CPython/3.8.12 Linux/5.11.0-1025-azure

File hashes

Hashes for yellowbox-0.6.9-py3-none-any.whl
Algorithm Hash digest
SHA256 907de4662026f2f0a269a6c093f1b78be36bca9865f49aa128c0d3fd58964011
MD5 39a73ccb3d548821294bc123ba283bc1
BLAKE2b-256 0856eeb328c0e89af43ee1bd4c86418c120d193667e7fd781b61eebee83529a2

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