12 个版本

0.4.0 2023 年 10 月 20 日
0.3.1 2022 年 7 月 21 日
0.3.0 2022 年 4 月 20 日
0.2.1 2021 年 3 月 4 日
0.0.2 2019 年 10 月 25 日

#81 in 测试

Download history 398/week @ 2024-04-14 568/week @ 2024-04-21 554/week @ 2024-04-28 260/week @ 2024-05-05 421/week @ 2024-05-12 431/week @ 2024-05-19 599/week @ 2024-05-26 338/week @ 2024-06-02 336/week @ 2024-06-09 564/week @ 2024-06-16 436/week @ 2024-06-23 345/week @ 2024-06-30 228/week @ 2024-07-07 402/week @ 2024-07-14 422/week @ 2024-07-21 488/week @ 2024-07-28

1,650 每月下载量
用于 15 个工具包 (10 个直接使用)

MIT 许可证

210KB
4K SLoC

dockertest-rs

从 Rust 集成测试套件中控制 Docker 容器。提供全面的管理支持,并自动清理。

此工具包为您提供了以下功能以满足 Docker 测试需求

  • 确保 Docker 容器根据 WaitFor 策略被调用并运行。
  • 自定义您自己的或使用包含的电池之一。
  • 通过其 ip 地址与测试体中的 RunningContainer 交互。
  • 使用 inject_container_name 将容器名称注入环境变量中,以设置容器间通信。
  • 测试结束后(无论成功还是失败)清理每个启动的容器。
  • 并发功能。所有测试都隔离到每个测试的单独网络中,并具有唯一生成的容器名称。

请参阅 工具包文档 以获取详细说明。

示例

这是一个简单的示例,展示了测试的一般结构。

use dockertest::{DockerTest, TestBodyContainer};
use std::sync::{Arc, Mutex};

#[test]
fn hello_world_test() {
   // Define our test instance, will pull images from dockerhub.
   let mut test = DockerTest::new().with_default_source(DockerHub);

   // Construct the container specification to be added to the test.
   //
   // A container specification can have multiple properties, depending on how the
   // lifecycle management of the container should be handled by dockertest.
   //
   // For any container specification where dockertest needs to create and start the container,
   // we must provide enough information to construct a composition of
   // an Image configured with provided environment variables, arguments, StartPolicy, etc.
   let hello = TestBodyContainer::with_repository("hello-world");

   // Populate the test instance.
   // The order of compositions added reflect the execution order (depending on StartPolicy).
   test.provide_container(hello);

   let has_ran: Arc<Mutex<bool>> = Arc::new(Mutex::new(false));
   let has_ran_test = has_ran.clone();
   test.run(|ops| async move {
       // A handle to operate on the Container.
       let _container = ops.handle("hello-world");

       // The container is in a running state at this point.
       // Depending on the Image, it may exit on its own (like this hello-world image)
       let mut ran = has_ran_test.lock().unwrap();
       *ran = true;
   });

   let ran = has_ran.lock().unwrap();
   assert!(*ran);
}

测试

测试此库需要以下条件

  • 在本地主机上可用的 docker 守护进程。
  • 在您的环境中设置 DOCKERTEST_BUILD_TEST_IMAGES=1,将触发测试镜像的构建。

测试设计为并行运行,不应与现有系统镜像冲突。本地镜像使用前缀 dockertest-rs/ 构建。

在 docker 中运行 dockertest

要在 docker 中运行 dockertest,您需要设置以下环境变量

  • DOCKERTEST_CONTAINER_ID_INJECT_TO_NETWORK=your_container_id/名称

DOCKERTEST_CONTAINER_ID_INJECT_TO_NETWORK 必须设置为 dockertest 容器运行时的 ID 或名称。

依赖项

约 12–24MB
约 380K SLoC