{"adoption": {"forks": 380, "observed_at": "2026-08-28T04:06:33.736942+00:00", "stars": 2279}, "canonical_url": "https://ross.abutalabs.com/products/testcontainers-python", "card": {"archived": false, "artifact_type": "library", "description": "Testcontainers is a Python library that providing a friendly API to run Docker container. It is designed to create runtime environment to use during your automatic tests.", "domain": ["testing", "developer-tools", "databases"], "enriched": true, "function": ["testing", "e2e-testing", "container-runtime", "database"], "health_score": 100, "homepage": "https://testcontainers-python.readthedocs.io/en/latest/", "language": "Python", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["testcontainers/testcontainers-python"], "name": "testcontainers/testcontainers-python", "platform": ["python", "cross-platform"], "pushed_at": "2026-08-26T03:56:50+00:00", "repo": "testcontainers/testcontainers-python", "stars": 2279, "tags": ["integration-testing", "docker-containers", "test-fixtures", "selenium", "functional-testing", "devops", "docker"], "topics": ["python", "python3", "testing", "testcontainers", "selenium", "database"], "urls": [], "use_cases": ["spin up a throwaway postgres database for integration tests", "run selenium browser tests in a docker container", "test against real databases instead of mocks in pytest", "create isolated runtime environments for automated tests", "start and stop docker containers programmatically in python"], "what_it_is": "Testcontainers for Python is a library providing a friendly API to spin up Docker containers (databases, browsers, etc.) as runtime environments for automated functional and integration tests. It manages container lifecycle with context managers and offers convenience helpers like connection URL generation.", "when_to_avoid": ["your tests can run against in-memory fakes or mocks without needing real services", "Docker is unavailable in your test environment", "you need to test against services on remote hosts rather than local containers"], "when_to_choose": ["you need realistic integration tests against real services like databases or message brokers", "you want ephemeral, disposable test environments managed from Python code", "you're already using Docker in your CI pipeline"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/testcontainers-python", "repo": "testcontainers/testcontainers-python", "role": "main", "score": 93}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.736942+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:41:24.126617+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1a5aeab778c102a09063581a02da3223f759ba2fbcb1bb891c9a192bfe050340", "fetched_at": "2026-08-28T04:06:33.736942+00:00", "kind": "readme", "missing": false, "url": "https://github.com/testcontainers/testcontainers-python"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.736942+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:41:24.126617+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1a5aeab778c102a09063581a02da3223f759ba2fbcb1bb891c9a192bfe050340", "fetched_at": "2026-08-28T04:06:33.736942+00:00", "kind": "readme", "missing": false, "url": "https://github.com/testcontainers/testcontainers-python"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:41:24.126617+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1a5aeab778c102a09063581a02da3223f759ba2fbcb1bb891c9a192bfe050340", "fetched_at": "2026-08-28T04:06:33.736942+00:00", "kind": "readme", "missing": false, "url": "https://github.com/testcontainers/testcontainers-python"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.736942+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.736942+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.736942+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:41:24.126617+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1a5aeab778c102a09063581a02da3223f759ba2fbcb1bb891c9a192bfe050340", "fetched_at": "2026-08-28T04:06:33.736942+00:00", "kind": "readme", "missing": false, "url": "https://github.com/testcontainers/testcontainers-python"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.736942+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.736942+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:41:24.126617+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1a5aeab778c102a09063581a02da3223f759ba2fbcb1bb891c9a192bfe050340", "fetched_at": "2026-08-28T04:06:33.736942+00:00", "kind": "readme", "missing": false, "url": "https://github.com/testcontainers/testcontainers-python"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.736942+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.736942+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.736942+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:41:24.126617+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1a5aeab778c102a09063581a02da3223f759ba2fbcb1bb891c9a192bfe050340", "fetched_at": "2026-08-28T04:06:33.736942+00:00", "kind": "readme", "missing": false, "url": "https://github.com/testcontainers/testcontainers-python"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.736942+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:33.736942+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:41:24.126617+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1a5aeab778c102a09063581a02da3223f759ba2fbcb1bb891c9a192bfe050340", "fetched_at": "2026-08-28T04:06:33.736942+00:00", "kind": "readme", "missing": false, "url": "https://github.com/testcontainers/testcontainers-python"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:41:24.126617+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1a5aeab778c102a09063581a02da3223f759ba2fbcb1bb891c9a192bfe050340", "fetched_at": "2026-08-28T04:06:33.736942+00:00", "kind": "readme", "missing": false, "url": "https://github.com/testcontainers/testcontainers-python"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:41:24.126617+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1a5aeab778c102a09063581a02da3223f759ba2fbcb1bb891c9a192bfe050340", "fetched_at": "2026-08-28T04:06:33.736942+00:00", "kind": "readme", "missing": false, "url": "https://github.com/testcontainers/testcontainers-python"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:41:24.126617+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1a5aeab778c102a09063581a02da3223f759ba2fbcb1bb891c9a192bfe050340", "fetched_at": "2026-08-28T04:06:33.736942+00:00", "kind": "readme", "missing": false, "url": "https://github.com/testcontainers/testcontainers-python"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 82}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3451, "days_push": 7, "days_rel": 40, "gap_med": 37, "n_releases_24m": 20}, "score": 93, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}