news 2026/8/21 15:33:20

测试驱动开发:用 Docker 搭建 deno-postgres 三种认证模式测试环境

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
测试驱动开发:用 Docker 搭建 deno-postgres 三种认证模式测试环境

测试驱动开发:用 Docker 搭建 deno-postgres 三种认证模式测试环境

【免费下载链接】postgresPostgreSQL driver for Deno项目地址: https://gitcode.com/gh_mirrors/postgr/postgres

deno-postgres 是 Deno 生态中最流行的 PostgreSQL 驱动(PostgreSQL driver for Deno)。做测试驱动开发(TDD)时,最头疼的不是写断言,而是准备一个稳定、可复现、覆盖各种认证方式的数据库测试环境。好消息是,deno-postgres 项目自带一套完整的 Docker 测试环境,一条命令就能同时启动clear、md5、scram-sha-256三种 PostgreSQL 认证模式的服务并自动跑完全部测试。本文带你完整搭建并理解这套环境,让你从零开始也能为 deno-postgres 贡献代码或复现认证问题。

为什么测试驱动开发需要三种认证模式

PostgreSQL 的客户端认证(pg_hba.conf)经历了多代演变,驱动必须逐一兼容:

认证模式安全性说明
clear(password)⚠️ 明文传输仅存在于 PostgreSQL 9 及更早版本,早已移除
md5中等传统加密方式,至今仍有大量老系统使用
scram-sha-256✅ 最强现代 PostgreSQL 默认认证,基于挑战-响应机制

如果只测默认的 scram,就可能在 md5 或明文模式下翻车。deno-postgres 的测试正是针对这三种模式分别设计了独立的数据库实例,这就是 docker-compose.yml 里出现三个 PostgreSQL 服务的原因。

一眼看懂 deno-postgres 自带的测试环境

项目根目录的 docker-compose.yml 定义了完整的测试矩阵:

服务名镜像版本认证模式端口
postgres_clearpostgres:9明文 password6000
postgres_md5postgres:14md56001
postgres_scrampostgres:14scram-sha-2566002

每个服务的配置都放在独立的目录里,例如 docker/postgres_scram/data/ 下就有pg_hba.conf(认证规则)、postgresql.conf(服务配置)、server.crtserver.key(TLS 证书)。这些测试用的 TLS 证书由 docker/generate_tls_keys.sh 生成,用于验证 SSL 连接场景。

一键搭建:最快配置方法

无需手工改任何配置,克隆仓库后两条命令搞定:

git clone https://gitcode.com/gh_mirrors/postgr/postgres cd postgres docker compose build --no-cache docker compose run tests

docker compose run tests会自动完成三件事:✅ 启动三个数据库容器 → ✅ 等待端口就绪(WAIT_HOSTS)→ ✅ 在容器内执行deno test -A --parallel --check跑完整套测试。整个过程完全自动化,这正是测试驱动开发想要的"可重复"环境。

三种认证模式背后的配置细节

scram-sha-256 的认证规则(pg_hba.conf)同时覆盖了 SSL 与非 SSL 连接:

hostssl postgres scram 0.0.0.0/0 scram-sha-256 hostnossl postgres scram 0.0.0.0/0 scram-sha-256

md5 模式(pg_hba.conf)则混合了 md5 与 scram 用户,专门测试两种加密并存的情况。而clear 模式(pg_hba.conf)使用password认证,验证老版本 PostgreSQL 的兼容性。

数据库初始化时,initialize_test_server.sql 会创建scrammd5clearsocket等专用测试用户,密码统一为postgres。md5 版本甚至通过UPDATE PG_AUTHID强制把密码改写成 md5 格式——这些细节都是为了让认证测试覆盖到真实的边界情况。

把测试跑起来:本地运行与 Docker 运行

Docker 是推荐方式,但如果你本机已装了 PostgreSQL,也可以直接运行:

deno test --allow-read --allow-net --allow-env

测试用例集中在 tests/ 目录:认证相关逻辑在 tests/auth_test.ts,连接与连接参数测试在 tests/connection_test.ts 和 tests/connection_params_test.ts,数据编码解码则在 tests/data_types_test.ts 等文件中。具体运行说明可参考 tests/README.md。

不只是认证:事务隔离级别也值得关注

除认证之外,deno-postgres 对 PostgreSQL 事务隔离级别的支持同样完善。项目文档中的这张对比图直观展示了read committedrepeatable readserializable三种隔离级别在防脏读、防不可重复读、防幻读等方面的差异,写事务相关测试前值得先看一遍:

常见问题与调试技巧

  • 端口被占用:三个服务固定使用 6000/6001/6002 端口,冲突时先docker compose stop清理。
  • 等待初始化WAIT_AFTER_HOSTS: "15"表示数据库上线后还要等 15 秒让元数据初始化完成,测试失败时先确认这步是否走完。
  • TLS 证书过期:本地重新运行 docker/generate_tls_keys.sh 即可重新生成。

小结

用 Docker 搭建 deno-postgres 三种认证模式测试环境,本质上就是把"环境搭建"从手工操作变成可复现的声明式配置。一次docker compose run tests,三种认证模式、SSL 连接、socket 连接全部覆盖,测试驱动开发的循环因此变得又快又稳。如果你正准备为 deno-postgres 提交认证相关的代码或修复,这套现成的环境就是你最好的起点。🚀

【免费下载链接】postgresPostgreSQL driver for Deno项目地址: https://gitcode.com/gh_mirrors/postgr/postgres

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 15:32:08

rust-ctrlc 快速入门:5 分钟让 Rust CLI 程序优雅响应 Ctrl-C

rust-ctrlc 快速入门:5 分钟让 Rust CLI 程序优雅响应 Ctrl-C 【免费下载链接】rust-ctrlc Easy Ctrl-C handler for Rust projects 项目地址: https://gitcode.com/gh_mirrors/ru/rust-ctrlc 当用户按下 Ctrl-C 时,你的 Rust 命令行程序会立刻被…

作者头像 李华
网站建设 2026/8/21 15:30:52

Whoosh核心原理:倒排索引的构建、存储与查询全解析

Whoosh核心原理:倒排索引的构建、存储与查询全解析 【免费下载链接】whoosh Pure-Python full-text search library 项目地址: https://gitcode.com/gh_mirrors/who/whoosh Whoosh 是一个纯 Python 实现的全文搜索库,它的核心引擎正是倒排索引。无…

作者头像 李华
网站建设 2026/8/21 15:29:21

个人微信API二次开发:消息撤回两分钟窗口

给客户的报价发成 90000。销售立刻调撤回,回包失败。日志里没有当时的 newMsgId,脚本拿着文本内容去撤,接口无法定位。 个人微信撤回看发送成功时的消息 ID 和经过时间。窗口按客户端实际限制走,代码里按约两分钟预留网络延迟。 …

作者头像 李华
网站建设 2026/8/21 15:22:58

动画生成异常时怎样保留可用体验

动画生成异常时怎样保留可用体验 模型给出的路径和关键帧也要当作外部输入处理。解析前检查数值是否有限、范围是否可接受;不通过时显示静态样式或已验证的资源,不把异常带进逐帧绘制。 bool valid(double value) > value.isFinite && value.…

作者头像 李华