
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
🏗️ 快速搭建完整依赖栈
🎁 轻松设置依赖初始状态
🏭 基于接近生产环境的真实软件进行测试
⏳ 无需花费时间编写模拟代码
🕹️ 测试实际程序行为和副作用
Gnomock 是一个集成和端到端测试工具包。它使用 Docker 创建临时容器来运行应用依赖,设置其初始状态,并在测试结束后自动清理。Gnomock 允许在可能的情况下使用无模拟方式测试代码。
Gnomock 的强大之处在于其丰富的预设,每个预设针对特定数据库、服务或工具实现集成。每个预设都提供了简便的初始状态设置方式:创建 SQL schema、向 S3 上传测试数据、向 Splunk 发送测试事件等。
"Gnomock" 名称代表 "no mock"(无模拟),前缀 "G" 代表 "Go" 😼。同时它发音类似 "gnome"(地精),因此采用了友好的花园地精形象(由 Michael Zolotov 设计)。
亲自体验使用临时 Docker 容器中的真实服务编写测试是多么简单快捷:
 p := postgres.Preset( postgres.WithUser("gnomock", "gnomick"), postgres.WithDatabase("mydb"), postgres.WithQueriesFile("/var/project/db/schema.sql"), ) container, _ := gnomock.Start(p) defer func() { _ = gnomock.Stop(container) }() connStr := fmt.Sprintf( "host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", container.Host, container.DefaultPort(), "gnomock", "gnomick", "mydb", ) db, _ := sql.Open("postgres", connStr) // db 已包含所需的 schema 和数据,可直接使用
查看包参考文档。有关预设文档,请参阅预设部分。
如果使用 Go,请参考在 Go 应用中使用 Gnomock部分。其他语言请参考文档。
Gnomock 的强大之处在于预设。以下是现有预设及其支持*版本列表。
* 支持的版本会作为 CI 流水线的一部分进行测试。其他版本可能也能工作。
| 预设 | Go 包 | HTTP API | Go API | 支持版本 |
|---|---|---|---|---|
| Localstack (AWS) | https://github.com/orlangure/gnomock/tree/master/preset/localstack | 文档 | 参考 | 0.12.2 |
| Splunk | https://github.com/orlangure/gnomock/tree/master/preset/splunk | 文档 | 参考 | 8.0.2 |
| Redis | https://github.com/orlangure/gnomock/tree/master/preset/redis | 文档 | 参考 | 5.0.10, 6.0.9 |
| Memcached | https://github.com/orlangure/gnomock/tree/master/preset/memcached | 文档 | 参考 | 1.6.9 |
| MySQL | https://github.com/orlangure/gnomock/tree/master/preset/mysql | 文档 | 参考 | 5.7.32, 8.0.22 |
| MariaDB | https://github.com/orlangure/gnomock/tree/master/preset/mariadb | 文档 | 参考 | 10.5.8 |
| PostgreSQL | https://github.com/orlangure/gnomock/tree/master/preset/postgres | 文档 | 参考 | 10.15, 11.10, 12.5, 13.1 |
| Microsoft SQL Server | https://github.com/orlangure/gnomock/tree/master/preset/mssql | 文档 | 参考 | 2017-latest, 2019-latest |
| MongoDB | https://github.com/orlangure/gnomock/tree/master/preset/mongo | 文档 | 参考 | 3.6.21, 4.4 |
| RabbitMQ | https://github.com/orlangure/gnomock/tree/master/preset/rabbitmq | 文档 | 参考 | 3.8.9-alpine, 3.8.9-management-alpine |
| Kafka | https://github.com/orlangure/gnomock/tree/master/preset/kafka | 文档 | 参考 | 2.5.1-L0 |
| Elasticsearch | https://github.com/orlangure/gnomock/tree/master/preset/elastic | 文档 | 参考 | 5.6, 6.8.13, 7.9.3 |
| Kubernetes | https://github.com/orlangure/gnomock/tree/master/preset/k3s | 文档 | 参考 | v1.19.12 |
| CockroachDB | https://github.com/orlangure/gnomock/tree/master/preset/cockroachdb | 文档 | 参考 | v19.2.11, v20.1.10 |
| InfluxDB | https://github.com/orlangure/gnomock/tree/master/preset/influxdb | 文档 | 参考 | 2.0.4-alpine |
可以直接从 Go 代码使用 Gnomock 而无需任何预设。HTTP API 仅允许使用本仓库中存在的预设来设置容器。
Gnomock 并非唯一旨在通过临时 Docker 容器简化集成和端到端测试的项目:
testcontainers/testcontainers-goory/dockertest这些项目非常出色,为用户提供了极大的灵活性和功能。它们能实现许多 Gnomock 无法实现的功能。但以下是 Gnomock 有时具有优势的地方:
如果您的网络不够快,无法拉取测试中使用的 Docker 镜像,本地运行时经常会发生这种情况。在 CI(如 Github Actions)中,镜像下载速度非常快。要解决本地此问题,请在运行测试前手动拉取镜像。只需执行一次,镜像会保留在本地缓存中直到删除。例如,要拉取 Postgres 11 镜像:
bashdocker pull postgres:11
这可能是因为容器在超时前无法准备就绪。默认情况下,Gnomock 对新容器使用相当高的超时(启动和设置)。如果您使用 WithTimeout(HTTP 中的 timeout)更改默认超时,可能设置的值过短。
当同时启动大量容器时会发生这种情况。系统(尤其是 Github Actions 等 CI 环境)无法处理负载,容器在超时前无法变为健康状态。因此 Gnomock 有多个独立构建任务,每个任务只运行一小部分测试,一次一个包。
如果以服务器模式运行 gnomock,需要确保设置中使用的文件在 gnomock 容器内可用。使用 docker run 的 -v $(pwd):$(pwd) 参数将当前工作目录挂载到 gnomock 容器内的相同路径。如果希望永久运行 gnomock 容器,可以挂载整个 $HOME 目录(或存放代码的任何其他目录)。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务