#integration-tests #docker #environment

dev testcontainers

A library for integration-testing against docker containers from within Rust

36 releases (22 breaking)

new 0.23.2 Feb 7, 2025
0.23.1 Sep 26, 2024
0.22.0 Aug 30, 2024
0.21.0 Jul 30, 2024
0.3.1 Oct 23, 2018

#16 in Testing

Download history 55820/week @ 2024-10-22 51646/week @ 2024-10-29 49003/week @ 2024-11-05 47814/week @ 2024-11-12 53801/week @ 2024-11-19 49272/week @ 2024-11-26 55889/week @ 2024-12-03 59023/week @ 2024-12-10 50849/week @ 2024-12-17 20228/week @ 2024-12-24 29848/week @ 2024-12-31 51948/week @ 2025-01-07 58523/week @ 2025-01-14 56063/week @ 2025-01-21 58346/week @ 2025-01-28 56868/week @ 2025-02-04

238,883 downloads per month
Used in 189 crates (146 directly)

MIT/Apache

225KB
5K SLoC

Testcontainers-rs

Continuous Integration Crates.io Docs.rs Slack

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.

  1. Depend on testcontainers
  2. Implement testcontainers::core::Image for necessary docker-images
  3. Run it with any available runner testcontainers::runners::* (use blocking feature for synchronous API)

Example:

  • Blocking API (under blocking feature)
use testcontainers::{core::{IntoContainerPort, WaitFor}, runners::SyncRunner, GenericImage, ImageExt};

#[test]
fn test_redis() {
    let container = GenericImage::new("redis", "7.2.4")
        .with_exposed_port(6379.tcp())
        .with_wait_for(WaitFor::message_on_stdout("Ready to accept connections"))
        .with_network("bridge")
        .with_env_var("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")
        .with_exposed_port(6379.tcp())
        .with_wait_for(WaitFor::message_on_stdout("Ready to accept connections"))
        .with_network("bridge")
        .with_env_var("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

at your option.

Dependencies

~23–40MB
~740K SLoC