# 测试数据清理脚本 ## 问题背景 在运行测试案例 `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` 文件,修改以下配置: ```go const ( // 服务器地址 baseURL = "http://localhost:8080" // 管理员认证信息 adminEmail = "admin@example.com" adminPassword = "admin123" // 测试用户邮箱前缀 testEmailPrefix = "test_" ) ``` ### 2. 运行清理脚本 ```bash # 进入scripts目录 cd scripts # 查看帮助信息 go run cleanup_test_data.go --help # 运行清理脚本 go run cleanup_test_data.go ``` ### 3. 脚本功能 脚本会自动执行以下操作: 1. **管理员登录**: 使用配置的管理员账户登录系统 2. **识别测试用户**: 根据邮箱规则识别测试用户: - 邮箱以 `test_` 开头 - 邮箱包含 `test` 关键字 - 邮箱包含 `example.com` 域名 3. **批量删除**: 使用管理员API批量删除测试用户 4. **数据一致性检查**: 检查剩余用户数据的完整性 ## API接口说明 脚本使用以下管理员API接口: | 接口 | 方法 | 说明 | |------|------|------| | `/v1/auth/login` | POST | 管理员登录 | | `/v1/admin/user` | GET | 获取用户列表 | | `/v1/admin/user/batch` | DELETE | 批量删除用户 | | `/v1/admin/user/{id}` | GET | 获取用户详情 | ## 清理规则 ### 用户删除规则 脚本会删除符合以下条件的用户: ```go 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` 表) - 相关缓存数据 ## 安全注意事项 ⚠️ **重要提醒**: 1. **仅在测试环境使用**: 此脚本会删除用户数据,请勿在生产环境运行 2. **备份数据**: 运行前建议备份数据库 3. **确认配置**: 确保管理员账户信息正确 4. **检查规则**: 确认测试用户识别规则符合预期 ## 故障排除 ### 常见错误 1. **登录失败** ``` ❌ 管理员登录失败: 登录失败 (Code: 401): Invalid credentials ``` - 检查管理员邮箱和密码是否正确 - 确认服务器是否正在运行 2. **连接失败** ``` ❌ 管理员登录失败: 登录请求失败: dial tcp [::1]:8080: connect: connection refused ``` - 检查服务器地址是否正确 - 确认服务器是否启动 3. **权限不足** ``` ❌ 获取用户列表失败: 获取用户列表失败 (Code: 403): Forbidden ``` - 确认使用的是管理员账户 - 检查管理员权限配置 ### 验证清理效果 清理完成后,可以重新运行测试脚本验证: ```bash 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定义