All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 7m9s
docs(scripts): 添加测试数据清理脚本的详细使用文档 fix(auth): 修复设备登录时处理孤立认证方法的问题 refactor(public): 改进邮箱绑定逻辑中的推荐码处理
测试数据清理脚本
问题背景
在运行测试案例 test/device.go 时,可能会遇到以下错误:
[ERROR] 2025/01/28 11:40:59 [DeviceLoginLogic] FindOne Error: record not found
这个错误通常是由于测试数据清理不完整导致的,具体表现为:
- 设备记录存在,但对应的用户记录已被删除
- 数据库中存在孤立的记录
- 测试用户数据没有完全清理
解决方案
使用 cleanup_test_data.go 脚本来清理测试数据,确保数据一致性。
使用方法
1. 配置脚本
编辑 cleanup_test_data.go 文件,修改以下配置:
const (
// 服务器地址
baseURL = "http://localhost:8080"
// 管理员认证信息
adminEmail = "admin@example.com"
adminPassword = "admin123"
// 测试用户邮箱前缀
testEmailPrefix = "test_"
)
2. 运行清理脚本
# 进入scripts目录
cd scripts
# 查看帮助信息
go run cleanup_test_data.go --help
# 运行清理脚本
go run cleanup_test_data.go
3. 脚本功能
脚本会自动执行以下操作:
- 管理员登录: 使用配置的管理员账户登录系统
- 识别测试用户: 根据邮箱规则识别测试用户:
- 邮箱以
test_开头 - 邮箱包含
test关键字 - 邮箱包含
example.com域名
- 邮箱以
- 批量删除: 使用管理员API批量删除测试用户
- 数据一致性检查: 检查剩余用户数据的完整性
API接口说明
脚本使用以下管理员API接口:
| 接口 | 方法 | 说明 |
|---|---|---|
/v1/auth/login |
POST | 管理员登录 |
/v1/admin/user |
GET | 获取用户列表 |
/v1/admin/user/batch |
DELETE | 批量删除用户 |
/v1/admin/user/{id} |
GET | 获取用户详情 |
清理规则
用户删除规则
脚本会删除符合以下条件的用户:
isTestUser := strings.HasPrefix(user.Email, testEmailPrefix) ||
strings.Contains(user.Email, "test") ||
strings.Contains(user.Email, "example.com")
数据清理范围
根据 internal/model/user/default.go 中的 Delete 方法,删除用户时会自动清理:
- 用户基本信息 (
User表) - 用户认证方式 (
AuthMethods表) - 用户订阅信息 (
Subscribe表) - 用户设备信息 (
Device表) - 相关缓存数据
安全注意事项
⚠️ 重要提醒:
- 仅在测试环境使用: 此脚本会删除用户数据,请勿在生产环境运行
- 备份数据: 运行前建议备份数据库
- 确认配置: 确保管理员账户信息正确
- 检查规则: 确认测试用户识别规则符合预期
故障排除
常见错误
-
登录失败
❌ 管理员登录失败: 登录失败 (Code: 401): Invalid credentials- 检查管理员邮箱和密码是否正确
- 确认服务器是否正在运行
-
连接失败
❌ 管理员登录失败: 登录请求失败: dial tcp [::1]:8080: connect: connection refused- 检查服务器地址是否正确
- 确认服务器是否启动
-
权限不足
❌ 获取用户列表失败: 获取用户列表失败 (Code: 403): Forbidden- 确认使用的是管理员账户
- 检查管理员权限配置
验证清理效果
清理完成后,可以重新运行测试脚本验证:
cd test
go run device.go
如果清理成功,应该不再出现 "record not found" 错误。
相关文件
test/device.go- 测试脚本internal/logic/admin/user/deleteUserLogic.go- 单个用户删除逻辑internal/logic/admin/user/batchDeleteUserLogic.go- 批量用户删除逻辑internal/model/user/default.go- 用户模型删除方法apis/admin/user.api- 管理员用户API定义