优化测试数据库连接管理
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
This commit is contained in:
2026-01-22 14:38:43 +08:00
parent 46e4e5f4f1
commit b68e7ec013
47 changed files with 2529 additions and 986 deletions

View File

@@ -15,10 +15,11 @@ import (
// TestEnterpriseStore_Create 测试创建企业
func TestEnterpriseStore_Create(t *testing.T) {
db, redisClient := testutils.SetupTestDB(t)
defer testutils.TeardownTestDB(t, db, redisClient)
tx := testutils.NewTestTransaction(t)
rdb := testutils.GetTestRedis(t)
testutils.CleanTestRedisKeys(t, rdb)
store := postgres.NewEnterpriseStore(db, redisClient)
store := postgres.NewEnterpriseStore(tx, rdb)
ctx := context.Background()
tests := []struct {
@@ -79,10 +80,11 @@ func TestEnterpriseStore_Create(t *testing.T) {
// TestEnterpriseStore_GetByID 测试根据 ID 查询企业
func TestEnterpriseStore_GetByID(t *testing.T) {
db, redisClient := testutils.SetupTestDB(t)
defer testutils.TeardownTestDB(t, db, redisClient)
tx := testutils.NewTestTransaction(t)
rdb := testutils.GetTestRedis(t)
testutils.CleanTestRedisKeys(t, rdb)
store := postgres.NewEnterpriseStore(db, redisClient)
store := postgres.NewEnterpriseStore(tx, rdb)
ctx := context.Background()
// 创建测试企业
@@ -118,10 +120,11 @@ func TestEnterpriseStore_GetByID(t *testing.T) {
// TestEnterpriseStore_GetByCode 测试根据企业编号查询
func TestEnterpriseStore_GetByCode(t *testing.T) {
db, redisClient := testutils.SetupTestDB(t)
defer testutils.TeardownTestDB(t, db, redisClient)
tx := testutils.NewTestTransaction(t)
rdb := testutils.GetTestRedis(t)
testutils.CleanTestRedisKeys(t, rdb)
store := postgres.NewEnterpriseStore(db, redisClient)
store := postgres.NewEnterpriseStore(tx, rdb)
ctx := context.Background()
// 创建测试企业
@@ -156,10 +159,11 @@ func TestEnterpriseStore_GetByCode(t *testing.T) {
// TestEnterpriseStore_Update 测试更新企业
func TestEnterpriseStore_Update(t *testing.T) {
db, redisClient := testutils.SetupTestDB(t)
defer testutils.TeardownTestDB(t, db, redisClient)
tx := testutils.NewTestTransaction(t)
rdb := testutils.GetTestRedis(t)
testutils.CleanTestRedisKeys(t, rdb)
store := postgres.NewEnterpriseStore(db, redisClient)
store := postgres.NewEnterpriseStore(tx, rdb)
ctx := context.Background()
// 创建测试企业
@@ -212,10 +216,11 @@ func TestEnterpriseStore_Update(t *testing.T) {
// TestEnterpriseStore_Delete 测试软删除企业
func TestEnterpriseStore_Delete(t *testing.T) {
db, redisClient := testutils.SetupTestDB(t)
defer testutils.TeardownTestDB(t, db, redisClient)
tx := testutils.NewTestTransaction(t)
rdb := testutils.GetTestRedis(t)
testutils.CleanTestRedisKeys(t, rdb)
store := postgres.NewEnterpriseStore(db, redisClient)
store := postgres.NewEnterpriseStore(tx, rdb)
ctx := context.Background()
// 创建测试企业
@@ -247,10 +252,11 @@ func TestEnterpriseStore_Delete(t *testing.T) {
// TestEnterpriseStore_List 测试查询企业列表
func TestEnterpriseStore_List(t *testing.T) {
db, redisClient := testutils.SetupTestDB(t)
defer testutils.TeardownTestDB(t, db, redisClient)
tx := testutils.NewTestTransaction(t)
rdb := testutils.GetTestRedis(t)
testutils.CleanTestRedisKeys(t, rdb)
store := postgres.NewEnterpriseStore(db, redisClient)
store := postgres.NewEnterpriseStore(tx, rdb)
ctx := context.Background()
// 创建多个测试企业
@@ -293,10 +299,11 @@ func TestEnterpriseStore_List(t *testing.T) {
// TestEnterpriseStore_GetByOwnerShopID 测试根据归属店铺查询企业
func TestEnterpriseStore_GetByOwnerShopID(t *testing.T) {
db, redisClient := testutils.SetupTestDB(t)
defer testutils.TeardownTestDB(t, db, redisClient)
tx := testutils.NewTestTransaction(t)
rdb := testutils.GetTestRedis(t)
testutils.CleanTestRedisKeys(t, rdb)
store := postgres.NewEnterpriseStore(db, redisClient)
store := postgres.NewEnterpriseStore(tx, rdb)
ctx := context.Background()
shopID1 := uint(100)
@@ -364,10 +371,11 @@ func TestEnterpriseStore_GetByOwnerShopID(t *testing.T) {
// TestEnterpriseStore_UniqueConstraints 测试唯一约束
func TestEnterpriseStore_UniqueConstraints(t *testing.T) {
db, redisClient := testutils.SetupTestDB(t)
defer testutils.TeardownTestDB(t, db, redisClient)
tx := testutils.NewTestTransaction(t)
rdb := testutils.GetTestRedis(t)
testutils.CleanTestRedisKeys(t, rdb)
store := postgres.NewEnterpriseStore(db, redisClient)
store := postgres.NewEnterpriseStore(tx, rdb)
ctx := context.Background()
// 创建测试企业