1. 概述

本指南将深入解析 Testcontainers Desktop 应用程序——一个用于运行 Testcontainers 的轻量级但功能强大的工具。我们将学习如何用它配置 Docker 环境、管理容器生命周期,并获取开发测试模式的洞察数据。

2. Testcontainers Desktop 简介

Testcontainers Desktop 提供极简 UI,专门简化 Testcontainers 配置和调试流程。可从官网免费下载。使用前需注册账户(支持 Google/GitHub/Docker 第三方登录)。

安装登录后即可在工作流中使用 Testcontainers Desktop:

testcontainers desktop icon

任务栏会出现 Testcontainers 图标,右键点击即可访问核心功能:

  • ✅ 使用 Testcontainers Cloud
  • ⏸️ 冻结容器关闭
  • 🔧 设置固定端口
  • 🖥️ 容器交互操作
  • 📊 查看测试仪表盘
  • ⚙️ 高级自定义配置

3. Testcontainers 执行模式

Testcontainers Desktop 提供两种测试运行模式:本地执行和云端执行。默认使用本地模式。

3.1 本地执行模式

本地执行依赖本地 Docker 环境。以下是一个使用 Testcontainers 启动 MongoDB 容器的 JUnit 测试示例:

@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() {
        // ...
    }
}

若本地无镜像,日志会显示拉取过程,随后启动容器:

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 命令手动验证容器状态。

3.2 Testcontainers Cloud 执行模式

Testcontainers Cloud 提供云端可扩展测试运行平台。适用于不想在本地运行容器或无 Docker 环境的场景。

⚠️ Cloud 模式为付费功能,但每月提供 300 分钟免费额度

在 UI 中切换至 “Run with Testcontainers Cloud”

testcontainers cloud

重新运行测试后日志对比:

org.testcontainers.dockerclient.DockerClientProviderStrategy - Found Docker environment with Testcontainers Host with tc.host=tcp://127.0.0.1:65497
org.testcontainers.DockerClientFactory - Docker host IP address is 127.0.0.1
org.testcontainers.DockerClientFactory - Connected to docker:
    Server Version: 78+testcontainerscloud (via Testcontainers Desktop 1.7.0)
    API Version: 1.43
    Operating System: Ubuntu 20.04 LTS
    Total Memory: 7407 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:  0 pending,  0 downloaded,  0 extracted, (0 bytes/0 bytes)
tc.mongo:4.0.10 - Pulling image layers: 12 pending,  1 downloaded,  0 extracted, (0 bytes/? MB)
[ ... ]

此时使用云端环境,镜像不再本地下载。执行 docker ps 将看不到本地容器。

4. Testcontainers 调试技巧

Testcontainers Desktop 提供流畅的调试体验,包含容器冻结、固定端口、配置定制和直接容器交互等功能。

4.1 冻结容器关闭

可通过桌面应用手动控制容器生命周期。例如启用 “Freeze container shutdown” 使容器在测试结束后持续运行:

freeze container shutdown

启用后重新运行测试,会收到容器冻结通知。

查看本地端口映射(MongoDB 默认端口 27017):

docker ps

tc port mapping

如上图,容器端口 27017 映射到本地 64215 端口。使用 Studio3T 等 MongoDB 客户端连接:

studio3t connection

测试数据存入 test 数据库的 characters 集合,执行查询验证:

mongodb query

✅ 所有记录均正确保存。

4.2 设置固定端口

Testcontainers 默认使用随机端口。若需频繁调试,可改用固定端口避免重复查询映射

操作步骤:

  1. 进入 Services > Open config location
  2. 找到 mongodb.toml.example 文件并重命名为 mongodb.toml

testcontainers config

修改端口映射配置:

# `local-port` 配置本地暴露端口
# `container-port` 指定容器内代理端口
ports = [
  {local-port = 27017, container-port = 27017},
]

👉 生效后可直接使用 27017 端口连接,无需每次检查映射

4.3 容器交互操作

当数据库连接不足以调试时,可直接访问容器内部。通过 Containers 菜单选择目标容器,支持三种操作:

  • 🖥️ Open terminal(打开终端)
  • 📄 Tail logs(跟踪日志)
  • ⛔ Terminate(终止容器)

debug cotainers

选择 Open terminal 进入容器终端(路径:Containers > mongo:4.0.10 > Open terminal):

open terminal

执行 MongoDB 调试命令:

mongo                    # 启动 MongoDB shell
show dbs                 # 列出数据库
use test                 # 切换到测试数据库
db.getCollection("characters").find({"race":"hobbit"})  # 查询霍比特人角色

mongodb shell

✅ 成功通过容器内终端查询到测试数据。

5. Testcontainers 仪表盘

Testcontainers Desktop 提供可视化仪表盘,汇总所有 Testcontainers 使用情况。通过菜单 Open Dashboard… 访问:

testcontainers dashboard

仪表盘包含:

  • 📦 容器与镜像使用统计
  • 🔗 资源链接与账户设置
  • 📈 最近活动与执行环境

此协作工具整合桌面与 CI 环境的测试数据,通过可视化组件提供以下洞察:

  • 测试一致性分析
  • 版本发布影响评估
  • 热门容器镜像统计
  • 过时依赖项检测

6. 总结

本文全面介绍了 Testcontainers Desktop 的核心功能,助你高效运行和调试测试容器。我们重点实践了:

  • ⏸️ 容器冻结技巧
  • 🔌 固定端口配置
  • 🖥️ 容器终端交互
  • 📊 仪表盘数据分析

这些功能显著提升了测试调试效率,特别适合需要频繁操作容器环境的开发场景。

本文示例代码已上传至 GitHub 仓库,欢迎参考实践。


原始标题:Testcontainers Desktop