Engula CodeProof 是一套 Docker 可运行的验证工具,用于在本地测试机上运行 Engula 的兼容性、客户端、性能、稳定性、迁移、平台与高可用验证,并生成可审计的 HTML 报告。
这篇官网指南只介绍 Docker 镜像 + 交互式 TUI 的使用方式。源码构建、裸机安装、命令行参数、自动化集成和远程服务器模式会放在开源项目文档中维护。
安全提示:只有当你在 TUI 中选择
client或platform这类需要再次启动 Docker 容器的测试时,才需要把宿主机 Docker socket 挂入 CodeProof 容器。这样容器可以调用宿主机 Docker daemon,请只在受控测试机中使用。
CodeProof 是 Engula 的完整验证套件。它把 Redis 官方测试集、社区客户端测试、性能基准和运维场景组织成多个 suite,每次运行都会把日志与报告写到 results/ 目录。
| Suite | 验证内容 |
|---|---|
compat |
Redis 7.2 命令、协议、Lua、事务、Pub/Sub、Stream、持久化、ACL、模块等兼容性 |
client |
Jedis、redis-py、go-redis、node-redis 等社区客户端兼容性 |
perf |
吞吐、延迟、CPU、内存效率、RDB save/load、批量请求、非字符串数据类型性能 |
stability |
内存检测、长跑稳定性、崩溃恢复、BGSAVE 稳定性等 |
migration |
RDB/AOF 导入、在线迁移与迁移结果校验 |
platform |
不同 Linux 发行版、架构和容器环境下的实时验证 |
ha |
Sentinel、Cluster、复制、reshard、混合部署与网络分区恢复 |
官网版使用 Docker 镜像运行,不需要在主机上安装 Go、Redis 源码、memtier_benchmark、JDK、Node.js 或 Python 依赖。镜像内已经打包了主要运行组件:
| 组件 | 镜像内路径 |
|---|---|
engula-server |
/root/.proof/bin/engula-server |
redis-server、redis-cli、redis-benchmark |
/root/.proof/bin/ |
memtier_benchmark |
/root/.proof/bin/memtier_benchmark |
proof CLI 与 proof-web |
/root/.proof/bin/ |
| RedisJSON、RediSearch、RedisBloom、TairHash、TairString 等模块 | /root/.proof/modules/ |
| Redis 源码与客户端源码 | /root/.proof/src/ |
你只需要准备:
| 项目 | 说明 |
|---|---|
| Docker | 主机已安装 Docker,并能执行 docker pull 与 docker run |
| 终端 | TUI 需要真实终端,因此运行时要加 -it |
| 磁盘目录 | 准备一个 results/ 目录保存报告 |
| CPU / 内存 | 轻量兼容性测试资源占用较低;性能、稳定性和全量测试需要更多 CPU 与内存 |
如果选择 client 或 platform,测试过程会再拉取社区镜像或平台镜像。国内主机可能因为镜像下载速度慢而等待较久。
预构建镜像使用 latest tag 发布,Docker 会根据运行主机的平台自动拉取匹配镜像,不需要手动区分 x86、Arm 或不同操作系统:
在任意工作目录执行:
这条命令会进入交互式终端界面。运行结束后,报告会写入主机当前目录的 results/。
如果你准备在 TUI 中运行 client 或 platform,请用下面的启动方式,让 CodeProof 容器能够访问宿主机 Docker:
--net host 用于让 CodeProof 容器和它启动的子容器网络互通;/var/run/docker.sock 用于让 CodeProof 容器调用宿主机 Docker daemon;/tmp:/tmp 让 client 子项(如 2.4 node-redis sentinel 测试)写入的 sentinel.conf 等临时文件能被宿主机 Docker daemon 看到。只跑 compat、perf、stability、migration、ha 时,通常不需要这三个选项。
启动后首先进入选择界面:
常用操作:
| 按键 | 作用 |
|---|---|
↑ / ↓ |
在当前列表中移动 |
→ |
从 suite 列切到 sub-item 列 |
← |
从 sub-item 列返回 suite 列 |
Enter |
运行当前选中的 suite 或 sub-item |
q |
退出 |
如果停在某个 suite 上直接按 Enter,会运行该 suite 的全部子项。如果切到右侧并选中某个子项,再按 Enter,只会运行这个子项。
按 Enter 后进入运行看板:
看板分为三块:
| 区域 | 含义 |
|---|---|
Queue |
当前批次中的子项队列与 PASS / FAIL / 运行中状态 |
Current / Live metrics |
当前子项、进度和可用的运行指标 |
Output |
当前运行日志尾部 |
运行期间可以按 l 查看完整日志,按 Esc 返回看板;需要取消本轮运行时按 c。
全部子项完成后会进入完成页:
容器里通常没有配置图形浏览器,所以 Enter 不一定能直接打开页面。你可以在主机上打开 results/ 下生成的 HTML 文件。
第一次使用建议从小范围开始:
| 目标 | 推荐选择 |
|---|---|
| 快速确认工具是否能跑通 | compat 中的单个子项,例如 coverage |
| 查看 Redis 官方测试覆盖 | compat |
| 验证客户端生态 | client,启动容器时需要挂 Docker socket |
| 看吞吐、延迟、内存效率 | perf |
| 做稳定性验证 | stability,注意部分子项耗时较长 |
| 验证 RDB / AOF 或迁移链路 | migration |
| 验证不同 Linux 平台 | platform,启动容器时需要挂 Docker socket |
| 验证高可用行为 | ha |
不建议第一次直接选择 All suites。完整运行耗时更长,也更依赖机器资源和网络环境。
运行结束后,主机当前目录会出现 results/:
常用文件:
| 文件 | 用途 |
|---|---|
main.log |
当前子项的完整运行日志 |
report.html |
单个子项的 HTML 报告 |
index.html |
TUI 批次汇总页 |
report.json |
批次汇总数据 |
浏览器直接打开 report.html 或 index.html 即可查看结果。报告是静态 HTML,不依赖服务端。
请确认 docker run 中包含 -it。TUI 需要真实终端,不能在普通管道或无交互终端中运行。
client 或 platform 时报 Docker daemon 连接失败这类测试会在 CodeProof 容器内部再启动其它容器。请使用带 Docker socket 的启动方式:
client 或 platform 等待时间很长这些测试可能需要从 docker.io 拉取社区镜像或平台镜像。国内主机上如果镜像下载速度慢,首次运行会等待更久。建议先从 compat、perf 或 ha 这类不额外拉镜像的 suite 开始。
确认启动时挂载了结果目录:
TUI 默认结果目录是 /work/results。如果没有挂载这个目录,报告会留在容器内部,容器退出后不会保留。