Testcontainer桌面应用简介

在本教程中,我们将探索 Testcontainers 桌面应用程序,这是一个用于运行Testcontainers的简单而强大的工具。我们将学习如何使用它来配置Docker 环境、管理容器生命周期,并深入了解我们的开发和测试模式。

Testcontainers Desktop 提供了一个最小的 UI,旨在简化 Testcontainer 配置和调试。

我们可以从官方网站免费下载Testcontainers Desktop 。要开始使用它,我们将通过创建帐户或通过 Google、GitHub 或 Docker 等第三方进行注册。

就这样!安装应用程序并登录后,我们就可以开始在开发工作流程中使用 Testcontainers Desktop:

我们应该在任务栏中看到 Testcontainers 徽标。如果我们右键单击它,我们将看到我们今天将探讨的一些关键功能:

  • 使用测试容器云Use Testcontainers Cloud
  • 冷冻容器关闭Freeze containers shutdown
  • 定义固定端口Define fixed ports
  • 与容器交互Interact with the containers
  • 请参阅测试容器仪表板See Testcontainers dashboard
  • 执行高级定制Perform advanced customizations

测试容器执行模式
Testcontainers Desktop 为开发人员提供了两种主要的运行测试方式:本地或在云中。值得注意的是,本地执行是默认行为。

1. 本地执行
本地执行利用我们本地的 Docker 环境。例如,让我们运行一个 JUnit 测试,该测试使用 Testcontainers 来启动 MongoDB Docker 容器:

@Testcontainers
@SpringBootTest
class DynamicPropertiesLiveTest {
    @Container
    static MongoDBContainer mongoDBContainer = new MongoDBContainer(DockerImageName.parse("mongo:4.0.10"));
    @DynamicPropertySource
    static void setProperties(DynamicPropertyRegistry registry) {
        registry.add(
"spring.data.mongodb.uri", mongoDBContainer::getReplicaSetUrl);
    }
   
    @Test
    void whenRequestingHobbits_thenReturnFrodoAndSam() {
       
// ...
    }
}

如果我们本地还没有 Docker 镜像,我们会看到 Docker 在日志中拉取它。之后,MongoDB 容器启动:

org.testcontainers.dockerclient.DockerClientProviderStrategy - Found Docker environment with local Npipe socket (npipe:////./pipe/docker_engine)
org.testcontainers.DockerClientFactory - Docker host IP address is localhost
org.testcontainers.DockerClientFactory - Connected to docker:
    Server Version: 4.8.3
    API Version: 1.41
    Operating System: fedora
    Total Memory: 7871 MB
org.testcontainers.DockerClientFactory - Checking the system...
org.testcontainers.DockerClientFactory - ✔︎ Docker server version should be at least 1.6.0
tc.mongo:4.0.10 - Pulling docker image: mongo:4.0.10. Please be patient; this may take some time but only needs to be done once.
tc.mongo:4.0.10 - Starting to pull image
tc.mongo:4.0.10 - Pulling image layers:  1 pending,  1 downloaded,  0 extracted, (0 bytes/? MB)
tc.mongo:4.0.10 - Pulling image layers:  0 pending,  2 downloaded,  0 extracted, (0 bytes/0 bytes)
[ ... ]
tc.mongo:4.0.10 - Pull complete. 14 layers, pulled in 17s (downloaded 129 MB at 7 MB/s)
tc.mongo:4.0.10 - Creating container for image: mongo:4.0.10
tc.mongo:4.0.10 - Container mongo:4.0.10 is starting: 3d74c3a...
tc.mongo:4.0.10 - Container mongo:4.0.10 started in PT21.0624015S

此外,我们可以通过在终端中运行“ docker ps ”命令来手动检查容器是否创建。

测试容器云执行
Testcontainers Cloud 提供了一个可扩展的平台,用于在云环境中运行测试。如果我们不想在本地运行容器或者无法访问正在运行的 Docker 环境,那么这是理想的选择。
TestContainer Cloud是Testcontainers的付费功能,但我们每月最多可以免费使用300分钟。

调试测试容器
Testcontainers Desktop通过防止容器关闭、定义固定端口、自定义配置以满足我们的需求以及直接与容器交互等功能,促进了流畅的调试体验。

1. 冻结容器关闭
我们可以使用桌面应用程序来手动控制容器的生命周期。例如,我们可以使用选项“冻结容器关闭”来允许正在运行的容器即使在启动它的测试终止后也能继续运行:

如果我们启用此功能并重新运行测试,我们将收到一条通知,确认容器已被冻结。

与容器交互
有时,即使连接到数据库也是不够的,例如当我们需要更详细的调试时。在这种情况下,我们可以直接访问Docker容器本身。例如,我们可以打开一个附加到容器的终端并与其交互。

测试容器仪表板
Testcontainers Desktop 提供了一个用户友好的仪表板,其中包含我们使用的 Testcontainers 的摘要。我们可以通过从菜单中选择“打开仪表板... ”选项来访问该网页

仪表板提供了所使用的测试容器和图像的概述,以及指向资源和帐户设置的有用链接。在页面底部,我们可以看到最近的活动以及用于执行的环境。

该协作工具跨桌面和 CI 环境聚合测试数据,提供对开发和测试模式的见解。仪表板上的小部件有助于回答有关测试一致性、发布影响、流行容器映像和过时依赖项的问题。