1. 概述
本指南将深入解析 Testcontainers Desktop 应用程序——一个用于运行 Testcontainers 的轻量级但功能强大的工具。我们将学习如何用它配置 Docker 环境、管理容器生命周期,并获取开发测试模式的洞察数据。
2. Testcontainers Desktop 简介
Testcontainers Desktop 提供极简 UI,专门简化 Testcontainers 配置和调试流程。可从官网免费下载。使用前需注册账户(支持 Google/GitHub/Docker 第三方登录)。
安装登录后即可在工作流中使用 Testcontainers Desktop:
任务栏会出现 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”:
重新运行测试后日志对比:
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” 使容器在测试结束后持续运行:
启用后重新运行测试,会收到容器冻结通知。
查看本地端口映射(MongoDB 默认端口 27017):
docker ps
如上图,容器端口 27017 映射到本地 64215 端口。使用 Studio3T 等 MongoDB 客户端连接:
测试数据存入 test 数据库的 characters 集合,执行查询验证:
✅ 所有记录均正确保存。
4.2 设置固定端口
Testcontainers 默认使用随机端口。若需频繁调试,可改用固定端口避免重复查询映射。
操作步骤:
- 进入 Services > Open config location
- 找到 mongodb.toml.example 文件并重命名为 mongodb.toml
修改端口映射配置:
# `local-port` 配置本地暴露端口
# `container-port` 指定容器内代理端口
ports = [
{local-port = 27017, container-port = 27017},
]
👉 生效后可直接使用 27017 端口连接,无需每次检查映射。
4.3 容器交互操作
当数据库连接不足以调试时,可直接访问容器内部。通过 Containers 菜单选择目标容器,支持三种操作:
- 🖥️ Open terminal(打开终端)
- 📄 Tail logs(跟踪日志)
- ⛔ Terminate(终止容器)
选择 Open terminal 进入容器终端(路径:Containers > mongo:4.0.10 > Open terminal):
执行 MongoDB 调试命令:
mongo # 启动 MongoDB shell
show dbs # 列出数据库
use test # 切换到测试数据库
db.getCollection("characters").find({"race":"hobbit"}) # 查询霍比特人角色
✅ 成功通过容器内终端查询到测试数据。
5. Testcontainers 仪表盘
Testcontainers Desktop 提供可视化仪表盘,汇总所有 Testcontainers 使用情况。通过菜单 Open Dashboard… 访问:
仪表盘包含:
- 📦 容器与镜像使用统计
- 🔗 资源链接与账户设置
- 📈 最近活动与执行环境
此协作工具整合桌面与 CI 环境的测试数据,通过可视化组件提供以下洞察:
- 测试一致性分析
- 版本发布影响评估
- 热门容器镜像统计
- 过时依赖项检测
6. 总结
本文全面介绍了 Testcontainers Desktop 的核心功能,助你高效运行和调试测试容器。我们重点实践了:
- ⏸️ 容器冻结技巧
- 🔌 固定端口配置
- 🖥️ 容器终端交互
- 📊 仪表盘数据分析
这些功能显著提升了测试调试效率,特别适合需要频繁操作容器环境的开发场景。
本文示例代码已上传至 GitHub 仓库,欢迎参考实践。