主要观点:介绍如何将临时 PostgreSQL 实例集成到 Go 测试设置中,以提高开发效率和减少资源消耗。
关键信息:
- 早期项目可使用单个
_test.go文件和现有测试辅助包,如github.com/stapelberg/postgrestest。 go test会为每个 Go 包编译独立测试二进制,默认并行度为GOMAXPROCS。- 共享一个 PostgreSQL 实例可减少测试运行时间约 20%,但要注意 Go 测试缓存问题,需固定
PGURL环境变量值。 - 可进一步优化,如隐藏 PostgreSQL 启动、消除模式创建成本重复等。
重要细节: - 启动一个 PostgreSQL 实例在不同设备上时间不同,如 Intel Core i9 12900K 约 300ms,MacBook Air M1 约 800ms,创建数据库每个操作在不同设备上时间也不同。
- 可通过创建
initpg包装器程序来共享 PostgreSQL 实例,使用Makefile构建可减少编译次数。 go test缓存规则及如何禁用缓存,如使用-count=1。postgrestest包可指定 Postgres 数据目录,txdb包可共享数据库且避免模式创建成本重复。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。