#integration-tests #docker #environment

dev testcontainers

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

35 releases (22 breaking)

0.23.1 Sep 26, 2024
0.22.0 Aug 30, 2024
0.21.0 Jul 30, 2024
0.15.0 Oct 5, 2023
0.3.1 Oct 23, 2018

#16 in Testing

Download history 37560/week @ 2024-07-28 38553/week @ 2024-08-04 41680/week @ 2024-08-11 38652/week @ 2024-08-18 43397/week @ 2024-08-25 47255/week @ 2024-09-01 41501/week @ 2024-09-08 37731/week @ 2024-09-15 40606/week @ 2024-09-22 45098/week @ 2024-09-29 44065/week @ 2024-10-06 47796/week @ 2024-10-13 54046/week @ 2024-10-20 53209/week @ 2024-10-27 51020/week @ 2024-11-03 46821/week @ 2024-11-10

206,731 downloads per month
Used in 157 crates (120 directly)

MIT/Apache

200KB
4.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};

#[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"))
        .start()
        .expect("Redis started");
}
  • Async API
use testcontainers::{core::{IntoContainerPort, WaitFor}, runners::AsyncRunner, GenericImage};

#[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"))
        .start()
        .await
        .expect("Redis started");
}

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–39MB
~740K SLoC