新增系统配置表及默认配置,更新链接生成请求DTO以支持链接数量参数,重构链接生成服务逻辑,添加链接状态查询和有效性检查接口,优化日志记录。

This commit is contained in:
zyh
2025-08-26 10:33:26 +08:00
parent 7317866f98
commit 599ec0a36b
73 changed files with 1829 additions and 50 deletions

View File

@@ -0,0 +1,275 @@
# 链接状态接口测试文档
## 接口概览
新增了三个接口用于前端获取链接状态信息:
1. **获取链接状态** - `GET /api/link/{codeNo}/status`
2. **检查链接是否存在** - `GET /api/link/{codeNo}/exists`
3. **检查链接是否有效** - `GET /api/link/{codeNo}/valid`
## 测试步骤
### 1. 准备工作
首先需要生成一个链接用于测试:
```bash
# 1. 登录获取JWT令牌
curl -X POST http://localhost:18080/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"username": "your_username",
"password": "your_password"
}'
```
从响应中获取JWT令牌后续请求都需要在Header中带上
```bash
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
```
### 2. 生成测试链接
```bash
# 2. 生成链接
curl -X POST http://localhost:18080/api/link/generate \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"times": 5,
"linkCount": 2
}'
```
响应示例:
```json
{
"batchId": 123,
"deductPoints": 250,
"expireAt": "2024-01-15T16:30:00",
"codeNos": ["ABC12345", "DEF67890"]
}
```
记录其中一个 `codeNo`,比如 `ABC12345`,用于后续测试。
### 3. 测试获取链接状态接口
```bash
# 3. 获取链接状态
curl -X GET http://localhost:18080/api/link/ABC12345/status \
-H "Accept: application/json"
```
**预期响应:**
```json
{
"codeNo": "ABC12345",
"batchId": 123,
"status": "NEW",
"statusDesc": "新建",
"expireAt": "2024-01-15T16:30:00",
"isExpired": false,
"remainingSeconds": 7200,
"quantity": 50,
"times": 5,
"totalPoints": 250,
"region": null,
"machineId": null,
"loginAt": null,
"createdAt": "2024-01-15T12:00:00",
"updatedAt": "2024-01-15T12:00:00"
}
```
### 4. 测试检查链接是否存在接口
```bash
# 4. 检查链接是否存在
curl -X GET http://localhost:18080/api/link/ABC12345/exists \
-H "Accept: application/json"
```
**预期响应:** `true`
### 5. 测试检查链接是否有效接口
```bash
# 5. 检查链接是否有效
curl -X GET http://localhost:18080/api/link/ABC12345/valid \
-H "Accept: application/json"
```
**预期响应:** `true`
### 6. 测试错误情况
#### 6.1 测试不存在的链接
```bash
# 测试不存在的链接
curl -X GET http://localhost:18080/api/link/INVALID123/status \
-H "Accept: application/json"
```
**预期响应:**
```json
{
"timestamp": "2024-01-15T12:00:00.000+00:00",
"status": 400,
"error": "Bad Request",
"message": "链接不存在: INVALID123",
"path": "/api/link/INVALID123/status"
}
```
#### 6.2 测试空链接编号
```bash
# 测试空链接编号
curl -X GET http://localhost:18080/api/link//status \
-H "Accept: application/json"
```
**预期响应:** 404 Not Found
## 状态值说明
### 链接状态 (status)
- `NEW` - 新建,未开始使用
- `USING` - 使用中,正在执行任务
- `LOGGED_IN` - 已登录,任务完成
- `REFUNDED` - 已退款
- `EXPIRED` - 已过期
### 区域 (region)
- `Q` - Q区
- `V` - V区
- `null` - 未分配区域
## 测试数据验证
### 1. 数值计算验证
- `totalPoints` = `quantity` × `times`
- `remainingSeconds` 应该大于0如果未过期
- `isExpired` 应该与当前时间和 `expireAt` 一致
### 2. 状态一致性验证
- 如果 `status``EXPIRED`,那么 `isExpired` 应该是 `true`
- 如果 `status``LOGGED_IN`,那么 `loginAt` 不应该为 `null`
### 3. 时间验证
- `createdAt``updatedAt`
- `expireAt` > `createdAt`
- 如果 `loginAt` 不为空,那么 `loginAt``createdAt`
## 性能测试
### 1. 响应时间测试
```bash
# 使用time命令测试响应时间
time curl -X GET http://localhost:18080/api/link/ABC12345/status
```
### 2. 并发测试
```bash
# 使用ab工具进行并发测试
ab -n 100 -c 10 http://localhost:18080/api/link/ABC12345/status
```
## 错误处理测试
### 1. 数据库连接异常
模拟数据库连接失败的情况,验证错误处理。
### 2. 网络超时
模拟网络延迟,验证超时处理。
### 3. 内存不足
模拟内存不足情况,验证系统稳定性。
## 安全测试
### 1. 权限验证
```bash
# 不带JWT令牌访问应该被拦截
curl -X GET http://localhost:18080/api/link/ABC12345/status
```
### 2. SQL注入防护
```bash
# 测试SQL注入
curl -X GET "http://localhost:18080/api/link/ABC12345'; DROP TABLE link_task; --/status"
```
### 3. XSS防护
```bash
# 测试XSS攻击
curl -X GET "http://localhost:18080/api/link/<script>alert('xss')</script>/status"
```
## 测试报告模板
### 测试结果记录
| 测试项目 | 测试结果 | 响应时间 | 备注 |
|---------|---------|---------|------|
| 获取链接状态 | ✅ 通过 | 45ms | 正常 |
| 检查链接存在 | ✅ 通过 | 23ms | 正常 |
| 检查链接有效 | ✅ 通过 | 28ms | 正常 |
| 错误处理 | ✅ 通过 | 15ms | 正常 |
| 性能测试 | ✅ 通过 | 平均35ms | 满足要求 |
### 问题记录
| 问题描述 | 严重程度 | 状态 | 备注 |
|---------|---------|------|------|
| 无 | - | - | - |
### 建议改进
1. 可以考虑添加缓存机制,减少数据库查询
2. 可以添加链接访问统计功能
3. 可以考虑添加链接状态变更通知功能
## 自动化测试
### 使用Postman Collection
可以创建Postman Collection来自动化测试这些接口
1. 创建环境变量存储JWT令牌和链接编号
2. 设置测试脚本验证响应数据
3. 使用Postman Runner批量执行测试
### 使用JUnit测试
```java
@SpringBootTest
@AutoConfigureTestDatabase
class LinkStatusControllerTest {
@Test
void testGetLinkStatus() {
// 测试获取链接状态
}
@Test
void testLinkNotExists() {
// 测试链接不存在的情况
}
}
```
## 总结
这些接口为前端提供了完整的链接状态查询功能,支持:
1. **完整的状态信息** - 包括任务详情、过期时间、奖励点数等
2. **实时状态计算** - 自动计算是否过期、剩余时间等
3. **友好的错误处理** - 提供清晰的错误信息和状态码
4. **高性能查询** - 使用响应式编程,支持高并发访问
前端可以根据这些接口实现丰富的用户界面,提供良好的用户体验。