Skip to main content

Collection of Testcontainers, pytest fixtures and test clients for end-to-end/integration testing for Python Tomodachi framework. A great starting point to learn more about Testcontainers and necessity of integration testing.

Project description

Tomodachi Testcontainers

Build Status FOSSA Status Quality Gate Status CodeScene Code Health CodeScene System Mastery codecov Maintainability

Tomodachi Testcontainers is a Python library built on top of testcontainers-python. It provides Testcontainers, pytest fixtures, and test clients for convenient use of Testcontainers with pytest and testing applications built with the Python Tomodachi framework.

This library was created to explore and learn Testcontainers. Although initially intended to be used with the Tomodachi framework, it works for testing applications built with any other Python framework like Flask, FastAPI, Django, etc.

What is Testcontainers?

Testcontainers is an open-source framework for providing throwaway, lightweight instances of databases, message brokers, web browsers, or just about anything that can run in a Docker container. It facilitates the use of Docker containers for functional, integration, and end-to-end testing. — https://testcontainers.com/

To learn more about what Testcontainers are and what problems they solve, take a look at the Getting Started guide in the official Testcontainers documentation - https://testcontainers.com/getting-started/

Documentation

Find documentation at https://filipsnastins.github.io/tomodachi-testcontainers/

The official Testcontainers documentation is at https://testcontainers.com/

Installation

Install with pip:

pip install tomodachi-testcontainers

Install with Poetry:

poetry add --group dev tomodachi-testcontainers

Find a list of extras in the installation reference.

A Simple Example

The hello, world Tomodachi service:

# src/hello.py
import tomodachi
from aiohttp import web


class Service(tomodachi.Service):
    @tomodachi.http("GET", r"/hello/?")
    async def hello(self, request: web.Request) -> web.Response:
        name = request.query.get("name", "world")
        return web.json_response({"message": f"Hello, {name}!"})
  • testcontainer_image fixture builds a Docker image with a Dockerfile from the current working directory.
  • tomodachi_container fixture starts a new Docker container running the hello service on a randomly available port.
  • test_hello_testcontainers sends a GET /hello?name=Testcontainers request to the running container and asserts the response.
# tests/test_hello.py
from typing import Generator

import httpx
import pytest

from tomodachi_testcontainers import DockerContainer, TomodachiContainer


@pytest.fixture(scope="session")
def tomodachi_container(testcontainer_image: str) -> Generator[DockerContainer, None, None]:
    with TomodachiContainer(testcontainer_image).with_command(
        "tomodachi run readme/hello.py --production"
    ) as container:
        yield container


@pytest.mark.asyncio(loop_scope="session")
async def test_hello_testcontainers(tomodachi_container: TomodachiContainer) -> None:
    async with httpx.AsyncClient(base_url=tomodachi_container.get_external_url()) as client:
        response = await client.get("/hello", params={"name": "Testcontainers"})

    assert response.status_code == 200
    assert response.json() == {"message": "Hello, Testcontainers!"}

Links

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

tomodachi_testcontainers-1.2.4.tar.gz (20.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tomodachi_testcontainers-1.2.4-py3-none-any.whl (32.6 kB view details)

Uploaded Python 3

File details

Details for the file tomodachi_testcontainers-1.2.4.tar.gz.

File metadata

  • Download URL: tomodachi_testcontainers-1.2.4.tar.gz
  • Upload date:
  • Size: 20.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.0

File hashes

Hashes for tomodachi_testcontainers-1.2.4.tar.gz
Algorithm Hash digest
SHA256 15eb157d770d27fb60cf52fbb9c2b7d85a94e38de50187c6286e8c5e191a0c0a
MD5 25301e1bd67f0de7190d2be17849af2b
BLAKE2b-256 d026a02cad9fbb6fb0bc0bc3d09a8057332528ef3eabaf1d9d4b3b9ac6fceecf

See more details on using hashes here.

File details

Details for the file tomodachi_testcontainers-1.2.4-py3-none-any.whl.

File metadata

File hashes

Hashes for tomodachi_testcontainers-1.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 4a19edc83c1bfd05ccbf65e6631399c46b2fbe335f8de755e9dd913cd41045ff
MD5 96ae9c0b911c6d52c604cf1174b06750
BLAKE2b-256 bd82eee78b40ca119851edc184f1e92c7b2ec97d0a537bbe5230ebedc19fec0d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page