#docker #集成测试 #在...内部 #运行器 #语言 #阻塞

dev testcontainers

一个在Rust内部对Docker容器进行集成测试的库

32 个版本 (20 个重大变化)

0.21.1 2024年8月5日
0.21.0 2024年7月30日
0.20.1 2024年7月18日
0.15.0 2023年10月5日
0.3.1 2018年10月23日

#14 in 测试

Download history 32723/week @ 2024-05-01 29332/week @ 2024-05-08 29284/week @ 2024-05-15 29311/week @ 2024-05-22 28945/week @ 2024-05-29 28334/week @ 2024-06-05 30137/week @ 2024-06-12 30219/week @ 2024-06-19 33400/week @ 2024-06-26 32397/week @ 2024-07-03 40902/week @ 2024-07-10 42402/week @ 2024-07-17 36462/week @ 2024-07-24 39465/week @ 2024-07-31 38295/week @ 2024-08-07 41564/week @ 2024-08-14

每月下载量 164,126
用于 125 个crate(直接使用103个)

MIT/Apache

190KB
4K SLoC

Testcontainers-rs

Continuous Integration Crates.io Docs.rs Slack

Testcontainers-rs 是 http://testcontainers.org 的官方 Rust 语言分支。

使用方法

testcontainers 是核心crate

该crate提供了一个用于测试环境中处理容器的API。

  1. 依赖 testcontainers
  2. 实现 testcontainers::core::Image 以使用必要的docker-images
  3. 使用任何可用的运行器运行它 testcontainers::runners::*(使用 blocking 特性以同步API)

示例

  • 阻塞API(在 blocking 特性下)
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");
}
  • 异步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");
}

可用的镜像

使用 testcontainers 最简单的方法是依赖可用的镜像(也称为模块)。

模块作为社区维护的crate提供: testcontainers-modules

许可证

根据您的选择,许可如下:

依赖项

~20–35MB
~662K SLoC