CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-testcontainers

Python library for throwaway instances of anything that can run in a Docker container

Overview
Eval results
Files

database-containers.mddocs/

Database Containers

Pre-configured containers for popular databases including relational databases (PostgreSQL, MySQL), NoSQL databases (MongoDB, Cassandra), and specialized data stores. Each container provides service-specific configuration options, connection utilities, and client integration.

Capabilities

PostgreSQL Container

PostgreSQL relational database container with automatic database, user, and password configuration, supporting multiple PostgreSQL versions and client drivers.

class PostgresContainer:
    def __init__(
        self,
        image: str = "postgres:latest",
        port: int = 5432,
        username: Optional[str] = None,
        password: Optional[str] = None,
        dbname: Optional[str] = None,
        driver: str = "psycopg2",
        **kwargs: Any
    ):
        """
        Initialize PostgreSQL container.
        
        Args:
            image: PostgreSQL Docker image
            port: PostgreSQL port (default 5432)
            username: Database username (auto-generated if None)
            password: Database password (auto-generated if None)
            dbname: Database name (auto-generated if None)
            driver: Database driver for connection URL
            **kwargs: Additional container options
        """

    def get_connection_url(self, host: Optional[str] = None, driver: Optional[str] = None) -> str:
        """
        Get PostgreSQL connection URL.
        
        Args:
            host: Override host (uses container host if None)
            driver: Override driver (uses instance driver if None)
            
        Returns:
            PostgreSQL connection URL string
        """

MySQL Container

MySQL relational database container with configurable authentication, database initialization, and support for different MySQL variants.

class MySqlContainer:
    def __init__(
        self,
        image: str = "mysql:latest",
        dialect: Optional[str] = None,
        username: Optional[str] = None,
        root_password: Optional[str] = None,
        password: Optional[str] = None,
        dbname: Optional[str] = None,
        port: int = 3306,
        seed: Optional[str] = None,
        **kwargs: Any
    ):
        """
        Initialize MySQL container.
        
        Args:
            image: MySQL Docker image
            dialect: SQL dialect (mysql, mysql+pymysql)
            username: Database username
            root_password: Root user password
            password: User password
            dbname: Database name
            port: MySQL port (default 3306)
            seed: SQL file path for database initialization
            **kwargs: Additional container options
        """

    def get_connection_url(self) -> str:
        """
        Get MySQL connection URL.
        
        Returns:
            MySQL connection URL string
        """

MongoDB Container

MongoDB NoSQL document database container with authentication support and direct client integration.

class MongoDbContainer:
    def __init__(
        self,
        image: str = "mongo:latest",
        port: int = 27017,
        username: Optional[str] = None,
        password: Optional[str] = None,
        dbname: Optional[str] = None,
        **kwargs: Any
    ):
        """
        Initialize MongoDB container.
        
        Args:
            image: MongoDB Docker image
            port: MongoDB port (default 27017)
            username: Database username
            password: Database password
            dbname: Database name
            **kwargs: Additional container options
        """

    def get_connection_url(self) -> str:
        """
        Get MongoDB connection URL.
        
        Returns:
            MongoDB connection URL string
        """

    def get_connection_client(self):
        """
        Get configured PyMongo client.
        
        Returns:
            PyMongo MongoClient instance
        """

ClickHouse Container

ClickHouse analytical database container optimized for OLAP workloads with configurable users and databases.

class ClickHouseContainer:
    def __init__(
        self,
        image: str = "clickhouse/clickhouse-server:latest",
        port: int = 8123,
        username: str = "default",
        password: str = "",
        dbname: str = "default",
        **kwargs: Any
    ):
        """
        Initialize ClickHouse container.
        
        Args:
            image: ClickHouse Docker image
            port: HTTP port (default 8123)
            username: Database username
            password: Database password
            dbname: Database name
            **kwargs: Additional container options
        """

    def get_connection_url(self) -> str:
        """
        Get ClickHouse connection URL.
        
        Returns:
            ClickHouse connection URL string
        """

Neo4j Container

Neo4j graph database container with authentication configuration and Bolt protocol support.

class Neo4jContainer:
    def __init__(
        self,
        image: str = "neo4j:latest",
        username: str = "neo4j",
        password: str = "test",
        **kwargs: Any
    ):
        """
        Initialize Neo4j container.
        
        Args:
            image: Neo4j Docker image
            username: Database username
            password: Database password
            **kwargs: Additional container options
        """

    def get_connection_url(self) -> str:
        """
        Get Neo4j Bolt connection URL.
        
        Returns:
            Neo4j Bolt connection URL string
        """

Cassandra Container

Apache Cassandra NoSQL wide-column database container with cluster configuration support.

class CassandraContainer:
    def __init__(
        self,
        image: str = "cassandra:latest",
        **kwargs: Any
    ):
        """
        Initialize Cassandra container.
        
        Args:
            image: Cassandra Docker image
            **kwargs: Additional container options
        """

    def get_connection_url(self) -> str:
        """
        Get Cassandra connection URL.
        
        Returns:
            Cassandra connection URL string
        """

InfluxDB Container

InfluxDB time-series database container with configurable authentication and database initialization.

class InfluxDbContainer:
    def __init__(
        self,
        image: str = "influxdb:latest",
        port: int = 8086,
        username: Optional[str] = None,
        password: Optional[str] = None,
        dbname: Optional[str] = None,
        **kwargs: Any
    ):
        """
        Initialize InfluxDB container.
        
        Args:
            image: InfluxDB Docker image
            port: InfluxDB port (default 8086)
            username: Database username
            password: Database password
            dbname: Database name
            **kwargs: Additional container options
        """

    def get_connection_url(self) -> str:
        """
        Get InfluxDB connection URL.
        
        Returns:
            InfluxDB connection URL string
        """

Microsoft SQL Server Container

Microsoft SQL Server relational database container with SA authentication and database configuration.

class SqlServerContainer:
    def __init__(
        self,
        image: str = "mcr.microsoft.com/mssql/server:latest",
        password: Optional[str] = None,
        **kwargs: Any
    ):
        """
        Initialize SQL Server container.
        
        Args:
            image: SQL Server Docker image
            password: SA user password
            **kwargs: Additional container options
        """

    def get_connection_url(self) -> str:
        """
        Get SQL Server connection URL.
        
        Returns:
            SQL Server connection URL string
        """

Oracle Free Container

Oracle Database Free (formerly Oracle XE) container for Oracle database testing.

class OracleDbContainer:
    def __init__(
        self,
        image: str = "gvenzl/oracle-free:latest",
        username: Optional[str] = None,
        password: Optional[str] = None,
        **kwargs: Any
    ):
        """
        Initialize Oracle Database container.
        
        Args:
            image: Oracle Database Docker image
            username: Database username
            password: Database password
            **kwargs: Additional container options
        """

    def get_connection_url(self) -> str:
        """
        Get Oracle Database connection URL.
        
        Returns:
            Oracle Database connection URL string
        """

ArangoDB Container

ArangoDB multi-model NoSQL database container supporting documents, graphs, and search.

class ArangoDbContainer:
    def __init__(
        self,
        image: str = "arangodb:latest",
        username: str = "root",
        password: Optional[str] = None,
        **kwargs: Any
    ):
        """
        Initialize ArangoDB container.
        
        Args:
            image: ArangoDB Docker image
            username: Database username
            password: Database password
            **kwargs: Additional container options
        """

    def get_connection_url(self) -> str:
        """
        Get ArangoDB connection URL.
        
        Returns:
            ArangoDB connection URL string
        """

DB2 Container

IBM DB2 database container for enterprise database testing.

class Db2Container:
    def __init__(
        self,
        image: str = "ibmcom/db2:latest",
        username: Optional[str] = None,
        password: Optional[str] = None,
        dbname: Optional[str] = None,
        **kwargs: Any
    ):
        """
        Initialize DB2 container.
        
        Args:
            image: DB2 Docker image  
            username: Database username
            password: Database password
            dbname: Database name
            **kwargs: Additional container options
        """

    def get_connection_url(self) -> str:
        """
        Get DB2 connection URL.
        
        Returns:
            DB2 connection URL string
        """

Scylla Container

Scylla high-performance Cassandra-compatible NoSQL database container.

class ScyllaContainer:
    def __init__(
        self,
        image: str = "scylladb/scylla:latest",
        **kwargs: Any
    ):
        """
        Initialize Scylla container.
        
        Args:
            image: Scylla Docker image
            **kwargs: Additional container options
        """

    def get_connection_url(self) -> str:
        """
        Get Scylla connection URL.
        
        Returns:
            Scylla connection URL string
        """

Usage Examples

PostgreSQL Integration

from testcontainers.postgres import PostgresContainer
import psycopg2

with PostgresContainer("postgres:13") as postgres:
    # Get connection details
    connection_url = postgres.get_connection_url()
    
    # Connect using psycopg2
    conn = psycopg2.connect(connection_url)
    cursor = conn.cursor()
    
    # Execute queries
    cursor.execute("CREATE TABLE users (id SERIAL PRIMARY KEY, email VARCHAR(255))")
    cursor.execute("INSERT INTO users (email) VALUES (%s)", ("test@example.com",))
    conn.commit()
    
    cursor.execute("SELECT * FROM users")
    users = cursor.fetchall()
    print(users)
    
    conn.close()

MongoDB Integration

from testcontainers.mongodb import MongoDbContainer

with MongoDbContainer("mongo:4.4") as mongo:
    # Get MongoDB client
    client = mongo.get_connection_client()
    
    # Use the database
    db = client.test_database
    collection = db.test_collection
    
    # Insert document
    result = collection.insert_one({"name": "John", "age": 30})
    print(f"Inserted document ID: {result.inserted_id}")
    
    # Query documents
    users = list(collection.find({"age": {"$gte": 18}}))
    print(f"Found {len(users)} adult users")

Multi-Database Setup

from testcontainers.postgres import PostgresContainer
from testcontainers.redis import RedisContainer
from testcontainers.core.network import Network

# Create shared network for containers
with Network() as network:
    # Start multiple databases
    with PostgresContainer("postgres:13") as postgres, \
         RedisContainer("redis:6") as redis:
        
        postgres.with_network(network).with_network_aliases("postgres")
        redis.with_network(network).with_network_aliases("redis")
        
        # Use both databases in your application
        pg_url = postgres.get_connection_url()
        redis_client = redis.get_client()
        
        # Application logic using both databases
        print(f"PostgreSQL: {pg_url}")
        print(f"Redis client: {redis_client}")

Custom Database Configuration

from testcontainers.mysql import MySqlContainer

# Custom MySQL configuration
mysql = MySqlContainer("mysql:8.0") \
    .with_env("MYSQL_ROOT_PASSWORD", "rootpass") \
    .with_env("MYSQL_DATABASE", "app_db") \
    .with_env("MYSQL_USER", "app_user") \
    .with_env("MYSQL_PASSWORD", "app_pass") \
    .with_volume_mapping("./init.sql", "/docker-entrypoint-initdb.d/init.sql", "ro")

with mysql:
    connection_url = mysql.get_connection_url()
    print(f"MySQL connection: {connection_url}")

Install with Tessl CLI

npx tessl i tessl/pypi-testcontainers

docs

cache-messaging.md

cloud-services.md

compose.md

core-containers.md

database-containers.md

index.md

search-analytics.md

waiting-strategies.md

web-testing.md

tile.json