优化测试数据库连接管理
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

@@ -23,14 +23,15 @@ func createEnterpriseTestContext(userID uint) context.Context {
}
func TestEnterpriseService_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)
enterpriseStore := postgres.NewEnterpriseStore(db, redisClient)
shopStore := postgres.NewShopStore(db, redisClient)
accountStore := postgres.NewAccountStore(db, redisClient)
enterpriseStore := postgres.NewEnterpriseStore(tx, rdb)
shopStore := postgres.NewShopStore(tx, rdb)
accountStore := postgres.NewAccountStore(tx, rdb)
service := enterprise.New(db, enterpriseStore, shopStore, accountStore)
service := enterprise.New(tx, enterpriseStore, shopStore, accountStore)
t.Run("创建企业-含账号创建", func(t *testing.T) {
ctx := createEnterpriseTestContext(1)
@@ -123,14 +124,15 @@ func TestEnterpriseService_Create(t *testing.T) {
}
func TestEnterpriseService_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)
enterpriseStore := postgres.NewEnterpriseStore(db, redisClient)
shopStore := postgres.NewShopStore(db, redisClient)
accountStore := postgres.NewAccountStore(db, redisClient)
enterpriseStore := postgres.NewEnterpriseStore(tx, rdb)
shopStore := postgres.NewShopStore(tx, rdb)
accountStore := postgres.NewAccountStore(tx, rdb)
service := enterprise.New(db, enterpriseStore, shopStore, accountStore)
service := enterprise.New(tx, enterpriseStore, shopStore, accountStore)
t.Run("编辑企业", func(t *testing.T) {
ctx := createEnterpriseTestContext(1)
@@ -173,14 +175,15 @@ func TestEnterpriseService_Update(t *testing.T) {
}
func TestEnterpriseService_UpdateStatus(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)
enterpriseStore := postgres.NewEnterpriseStore(db, redisClient)
shopStore := postgres.NewShopStore(db, redisClient)
accountStore := postgres.NewAccountStore(db, redisClient)
enterpriseStore := postgres.NewEnterpriseStore(tx, rdb)
shopStore := postgres.NewShopStore(tx, rdb)
accountStore := postgres.NewAccountStore(tx, rdb)
service := enterprise.New(db, enterpriseStore, shopStore, accountStore)
service := enterprise.New(tx, enterpriseStore, shopStore, accountStore)
t.Run("禁用企业-账号同步禁用", func(t *testing.T) {
ctx := createEnterpriseTestContext(1)
@@ -204,7 +207,7 @@ func TestEnterpriseService_UpdateStatus(t *testing.T) {
assert.Equal(t, constants.StatusDisabled, ent.Status)
var account model.Account
err = db.Where("enterprise_id = ?", createResult.Enterprise.ID).First(&account).Error
err = tx.Where("enterprise_id = ?", createResult.Enterprise.ID).First(&account).Error
require.NoError(t, err)
assert.Equal(t, constants.StatusDisabled, account.Status)
})
@@ -234,7 +237,7 @@ func TestEnterpriseService_UpdateStatus(t *testing.T) {
assert.Equal(t, constants.StatusEnabled, ent.Status)
var account model.Account
err = db.Where("enterprise_id = ?", createResult.Enterprise.ID).First(&account).Error
err = tx.Where("enterprise_id = ?", createResult.Enterprise.ID).First(&account).Error
require.NoError(t, err)
assert.Equal(t, constants.StatusEnabled, account.Status)
})
@@ -248,14 +251,15 @@ func TestEnterpriseService_UpdateStatus(t *testing.T) {
}
func TestEnterpriseService_UpdatePassword(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)
enterpriseStore := postgres.NewEnterpriseStore(db, redisClient)
shopStore := postgres.NewShopStore(db, redisClient)
accountStore := postgres.NewAccountStore(db, redisClient)
enterpriseStore := postgres.NewEnterpriseStore(tx, rdb)
shopStore := postgres.NewShopStore(tx, rdb)
accountStore := postgres.NewAccountStore(tx, rdb)
service := enterprise.New(db, enterpriseStore, shopStore, accountStore)
service := enterprise.New(tx, enterpriseStore, shopStore, accountStore)
t.Run("修改企业账号密码", func(t *testing.T) {
ctx := createEnterpriseTestContext(1)
@@ -275,7 +279,7 @@ func TestEnterpriseService_UpdatePassword(t *testing.T) {
require.NoError(t, err)
var account model.Account
err = db.Where("enterprise_id = ?", createResult.Enterprise.ID).First(&account).Error
err = tx.Where("enterprise_id = ?", createResult.Enterprise.ID).First(&account).Error
require.NoError(t, err)
assert.NotEqual(t, "OldPass123", account.Password)
assert.NotEqual(t, "NewPass456", account.Password)
@@ -290,14 +294,15 @@ func TestEnterpriseService_UpdatePassword(t *testing.T) {
}
func TestEnterpriseService_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)
enterpriseStore := postgres.NewEnterpriseStore(db, redisClient)
shopStore := postgres.NewShopStore(db, redisClient)
accountStore := postgres.NewAccountStore(db, redisClient)
enterpriseStore := postgres.NewEnterpriseStore(tx, rdb)
shopStore := postgres.NewShopStore(tx, rdb)
accountStore := postgres.NewAccountStore(tx, rdb)
service := enterprise.New(db, enterpriseStore, shopStore, accountStore)
service := enterprise.New(tx, enterpriseStore, shopStore, accountStore)
t.Run("查询企业列表-空结果", func(t *testing.T) {
ctx := createEnterpriseTestContext(1)