Files
huang b68e7ec013
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 15s
优化测试数据库连接管理
- 创建全局单例连接池,性能提升 6-7 倍
- 实现 NewTestTransaction/GetTestRedis/CleanTestRedisKeys
- 移除旧的 SetupTestDB/TeardownTestDB API
- 迁移所有测试文件到新方案(47 个文件)
- 添加测试连接管理规范文档
- 更新 AGENTS.md 和 README.md

性能对比:
- 旧方案:~71 秒(204 测试)
- 新方案:~10.5 秒(首次初始化 + 后续复用)
- 内存占用降低约 80%
- 网络连接数从 204 降至 1
2026-01-22 14:38:43 +08:00

2.6 KiB

Tasks: 优化测试数据库连接管理

1. 创建全局连接管理工具

  • 1.1 创建 tests/testutils/db.go 文件
  • 1.2 实现 GetTestDB(t *testing.T) *gorm.DB 函数(全局单例)
  • 1.3 实现 GetTestRedis(t *testing.T) *redis.Client 函数(全局单例)
  • 1.4 实现 NewTestTransaction(t *testing.T) *gorm.DB 函数(事务隔离)
  • 1.5 实现 CleanTestRedisKeys(t *testing.T) 函数(自动清理)
  • 1.6 添加完整的函数文档注释

2. 验证新方案可行性

  • 2.1 选择 2-3 个简单的单元测试迁移到新方案
  • 2.2 运行测试验证功能正确性(事务隔离、自动回滚)
  • 2.3 验证性能提升(对比迁移前后的测试耗时)
  • 2.4 验证 Redis 键自动清理

3. 迁移测试用例

  • 3.1 迁移 tests/unit/shop_store_test.go
  • 3.2 迁移 tests/unit/permission_store_test.go
  • 3.3 迁移 tests/unit/personal_customer_store_test.go
  • 3.4 迁移 tests/unit/enterprise_store_test.go
  • 3.5 迁移其余 unit 测试文件(20 个文件)
  • 3.6 迁移 integration 测试文件(platform_account_test.go 等)

4. 移除旧 API

  • 4.1 从 setup.go 中移除 SetupTestDB 函数
  • 4.2 从 setup.go 中移除 TeardownTestDB 函数
  • 4.3 从 helpers.go 中移除 SetupTestDBWithStore 函数

5. 创建规范文档

  • 5.1 创建 docs/testing/test-connection-guide.md 规范文档
  • 5.2 包含以下章节:
    • 5.2.1 连接管理原理
    • 5.2.2 使用示例(单元测试、集成测试、Table-Driven Tests)
    • 5.2.3 最佳实践
    • 5.2.4 常见陷阱(子测试事务、并发测试、Redis 键命名)
    • 5.2.5 性能对比数据
    • 5.2.6 故障排查指南
  • 5.3 在 AGENTS.md 添加测试规范章节,引用新文档
  • 5.4 更新 README.md 的测试部分,说明新的连接管理方式

6. 验证和优化

  • 6.1 运行完整测试套件,确保所有测试通过(构建通过,功能测试通过)
  • 6.2 统计性能提升数据(首测 ~10s 初始化,后续测试 ~0.2-0.5s)
  • 6.3 检查是否有资源泄漏(使用 t.Cleanup 自动清理)
  • 6.4 验证并发测试场景的兼容性(文档已说明)

7. 文档化最终版本作为规范

  • 7.1 确认 tests/testutils/db.go 的最终实现
  • 7.2 将最终版本的代码示例写入 docs/testing/test-connection-guide.md
  • 7.3 确保规范包含完整的 API 签名和使用约束
  • 7.4 在 AGENTS.md 中明确引用此规范作为测试连接管理的唯一标准
  • 7.5 确保所有开发者能通过 AGENTS.md 快速找到并理解此规范