使用 Go 和 PostgreSQL 进行测试:临时数据库

主要观点:介绍如何将临时 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包可共享数据库且避免模式创建成本重复。
阅读 16
0 条评论