Engula ClientCompat 是一个 Docker 可运行的客户端兼容性验证工具。它把主流 Redis 社区客户端的官方测试集打包到镜像中,用同一套测试分别验证 Redis 7.2 基线和 Engula,并生成 HTML 报告。
这篇官网指南只介绍 Docker 镜像 + 常用运行方式 + 报告解读。源码构建、客户端源码切换、长期趋势入库和 CI 深度集成等高级用法,会放在开源项目文档中维护。
安全提示:只有运行
jedis、redis-py、node-redis这类需要再次启动辅助容器的测试时,才需要把宿主机 Docker socket 挂入测试容器。这样容器可以调用宿主机 Docker daemon,请只在受控测试机中使用。
客户端兼容性测试回答的问题是:现有 Redis 客户端 SDK 使用 Engula 作为服务端时,连接、命令、事务、Pipeline、Pub/Sub、Stream、TLS 等常见行为是否与 Redis 7.2 基线保持一致。
当前镜像聚焦 4 个社区客户端:
| 客户端 | 语言 | 默认版本 | 测试方式 |
|---|---|---|---|
| Jedis | Java | v6.2.0 | Maven / JUnit |
| redis-py | Python | master | pytest |
| go-redis | Go | v9.3.1 | go test / Ginkgo |
| node-redis | Node.js | stable | npm / Mocha |
如果你只想快速确认 Redis 命令与数据结构兼容性,优先使用 Engula KernelCompat。如果你要做完整交付验收,使用 Engula CodeProof。ClientCompat 位于两者之间,专门验证真实客户端生态。
每个客户端测试都会按同一套流程运行:
report.html,展示 Engula 与 Redis 基线的通过率、差异用例和日志位置。默认判断方式是通过率对齐 Redis 基线。报告会同时列出 Redis 基线结果和 Engula 结果,方便判断差异来自 Engula 行为、客户端测试假设,还是上游测试环境。
官网版使用预构建 Docker 镜像运行,不需要在主机上安装 Java、Maven、Python、Go、Node.js 或客户端源码。你只需要准备:
| 项目 | 说明 |
|---|---|
| Docker | 主机已安装 Docker,并能执行 docker pull 与 docker run |
| 磁盘目录 | 准备一个 results/ 目录保存报告 |
| CPU / 内存 | 建议至少 8GB 内存;完整运行 4 个客户端会比单个客户端耗时更久 |
| 网络 | 首次运行部分客户端测试时,可能需要拉取辅助测试镜像 |
go-redis 测试不需要挂载 Docker socket,适合作为第一次快速跑通验证。jedis、redis-py、node-redis 会启动辅助容器,因此需要额外挂载 Docker socket。
:latest 是多架构镜像,amd64 与 arm64 主机会自动拉取匹配架构。
go-redis 不需要额外挂载 Docker socket,命令最简单:
这里的 --sub 2.3 对应 go-redis,用作最小化示例。完整客户端验证可以直接运行下一节的命令。
运行结束后,在主机当前目录的 results/ 下查看报告:
浏览器打开 report.html 即可查看本次测试的通过率、失败用例和日志索引。
如果要一次运行 4 个客户端,请使用带 Docker socket 的启动方式:
这条命令会按镜像内置顺序运行 Jedis、redis-py、go-redis 和 node-redis。
作为参考,在 M2 机器上完整运行一次约 38 分钟;实际耗时会受网络、辅助镜像缓存和 Docker 资源限制影响。
参数说明:
| 参数 | 作用 |
|---|---|
--net host |
让测试容器与它启动的辅助容器网络互通 |
/var/run/docker.sock |
允许测试容器调用宿主机 Docker daemon |
/tmp:/tmp |
让辅助容器能访问测试过程中生成的临时配置 |
/work/results |
容器内报告输出目录 |
如果你只运行 go-redis 示例,不需要 --net host、Docker socket 和 /tmp 绑定。
完整运行后,结果目录类似:
常用文件:
| 文件 | 用途 |
|---|---|
main.log |
单个客户端测试的完整运行日志 |
report.html |
单个客户端测试的 HTML 报告 |
client.json |
客户端套件汇总数据 |
index.html |
本轮客户端验证的汇总页 |
报告是静态 HTML,不依赖服务端。可以直接在浏览器打开,也可以作为 PoC 或验收材料归档。
每个客户端报告会展示这些核心字段:
| 字段 | 含义 |
|---|---|
Pass |
Engula 上通过的测试用例数 |
Fail |
Engula 上失败的测试用例数 |
Skip |
客户端测试集自身跳过的用例数 |
Pass Rate |
Engula 的通过率 |
Baseline |
同一测试集在 Redis 7.2 上的通过率 |
Delta |
Engula 通过率与 Redis 基线通过率的差值 |
建议重点看三类信息:
不需要。工具会自动启动并管理 Redis 与 Engula 进程,测试结束后自动清理。
部分客户端官方测试集会在测试过程中启动辅助容器,例如测试集群、代理、Sentinel 或 TLS 场景。测试容器需要通过宿主机 Docker daemon 启动这些辅助容器,因此要挂载 /var/run/docker.sock。
/tmp:/tmp?部分测试会在 /tmp 下生成临时配置,再把这些配置挂给辅助容器。挂载 /tmp:/tmp 可以保证测试容器和宿主机 Docker daemon 看到同一条临时路径。
首次运行可能需要拉取辅助测试镜像。建议先确认宿主机 Docker 可以正常拉取镜像,再运行完整客户端验证。只想快速确认工具链是否可用时,可以先跑 go-redis 示例。
Engula CodeProof 是完整验证套件,覆盖兼容性、客户端、性能、稳定性、迁移、平台与高可用。ClientCompat 只保留其中的客户端验证能力,镜像和文档都更聚焦,适合单独验证客户端生态。