testcontainers4.13.2
testcontainers4.13.2
Published
Python library for throwaway instances of anything that can run in a Docker container
pip install testcontainers
Package Downloads
Authors
Project URLs
Requires Python
<4.0,>=3.9.2
Dependencies
- azure-cosmos
; extra == "cosmosdb" - azure-storage-blob
<13.0,>=12.19; extra == "azurite" - bcrypt
; extra == "registry" - boto3
; extra == "aws" or extra == "localstack" - cassandra-driver
==3.29.1; extra == "scylla" - chromadb-client
<2.0.0,>=1.0.0; extra == "chroma" - clickhouse-driver
; extra == "clickhouse" - cryptography
; extra == "mailpit" or extra == "sftp" - docker
- google-cloud-datastore
>=2; extra == "google" - google-cloud-pubsub
>=2; extra == "google" - httpx
; extra == "aws" or extra == "generic" or extra == "test-module-import" - ibm_db_sa
; (platform_machine != "aarch64" and platform_machine != "arm64") and extra == "db2" - influxdb
; extra == "influxdb" - influxdb-client
; extra == "influxdb" - kubernetes
; extra == "k3s" - minio
; extra == "minio" - nats-py
; extra == "nats" - neo4j
; extra == "neo4j" - openfga-sdk
; python_version >= "3.10" and extra == "openfga" - opensearch-py
; extra == "opensearch" - oracledb
; extra == "oracle" or extra == "oracle-free" - pika
; extra == "rabbitmq" - pymongo
; extra == "mongodb" - pymssql
; (platform_machine != "arm64" or python_version >= "3.10") and extra == "mssql" - pymysql
[rsa]; extra == "mysql" - python-arango
<8.0,>=7.8; extra == "arangodb" - python-dotenv
- python-keycloak
; extra == "keycloak" - pyyaml
; extra == "k3s" - qdrant-client
; extra == "qdrant" - redis
; extra == "generic" or extra == "redis" - selenium
; extra == "selenium" - sqlalchemy
; extra == "db2" or extra == "mssql" or extra == "mysql" or extra == "oracle" or extra == "oracle-free" - trino
; extra == "trino" - typing-extensions
- urllib3
- weaviate-client
<5.0.0,>=4.5.4; extra == "weaviate" - wrapt
Testcontainers Python
testcontainers-python facilitates the use of Docker containers for functional and integration testing.
For more information, see the docs.
Getting Started
>>> from testcontainers.postgres import PostgresContainer
>>> import sqlalchemy
>>> with PostgresContainer("postgres:16") as postgres:
... engine = sqlalchemy.create_engine(postgres.get_connection_url())
... with engine.begin() as connection:
... result = connection.execute(sqlalchemy.text("select version()"))
... version, = result.fetchone()
>>> version
'PostgreSQL 16...'
The snippet above will spin up a postgres database in a container. The get_connection_url() convenience method returns a sqlalchemy compatible url we use to connect to the database and retrieve the database version.
Contributing / Development / Release
See CONTRIBUTING.md for more details.
Configuration
You can set environment variables to configure the library behaviour:
| Env Variable | Example | Description |
|---|---|---|
TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE | /var/run/docker.sock | Path to Docker's socket used by ryuk |
TESTCONTAINERS_RYUK_PRIVILEGED | false | Run ryuk as a privileged container |
TESTCONTAINERS_RYUK_DISABLED | false | Disable ryuk |
RYUK_CONTAINER_IMAGE | testcontainers/ryuk:0.8.1 | Custom image for ryuk |
RYUK_RECONNECTION_TIMEOUT | 10s | Reconnection timeout for Ryuk TCP socket before Ryuk reaps all dangling containers |
Alternatively you can set the configuration during runtime:
from testcontainers.core import testcontainers_config
testcontainers_config.ryuk_docker_socket = "/home/user/docker.sock"