A library for integration-testing against docker containers from within Rust.
Testcontainers-rs
Testcontainers-rs is the official Rust language fork of http://testcontainers.org.
Usage
testcontainers is the core crate
The crate provides an API for working with containers in a test environment.
- Depend on
testcontainers - Implement
testcontainers::core::Imagefor necessary docker-images - Run it with any available runner
testcontainers::runners::*(useblockingfeature for synchronous API)
Example:
- Blocking API (under
blockingfeature)
use testcontainers::{core::{IntoContainerPort, WaitFor}, runners::SyncRunner, GenericImage, ImageExt};
#[test] fn test_redis() { let container = GenericImage::new("redis", "7.2.4") .withexposedport(6379.tcp()) .withwaitfor(WaitFor::messageonstdout("Ready to accept connections")) .with_network("bridge") .withenvvar("DEBUG", "1") .start() .expect("Failed to start Redis"); }
- Async API
use testcontainers::{core::{IntoContainerPort, WaitFor}, runners::AsyncRunner, GenericImage, ImageExt};
#[tokio::test] async fn test_redis() { let container = GenericImage::new("redis", "7.2.4") .withexposedport(6379.tcp()) .withwaitfor(WaitFor::messageonstdout("Ready to accept connections")) .with_network("bridge") .withenvvar("DEBUG", "1") .start() .await .expect("Failed to start Redis"); }
Ready-to-use images
The easiest way to use testcontainers is to depend on ready-to-use images (aka modules).
Modules are available as a community-maintained crate: testcontainers-modules
License
Licensed under either of
- Apache License, Version 2.0
- MIT license
at your option.