新增系统配置表及默认配置,更新链接生成请求DTO以支持链接数量参数,重构链接生成服务逻辑,添加链接状态查询和有效性检查接口,优化日志记录。
This commit is contained in:
275
docs/链接状态接口测试.md
Normal file
275
docs/链接状态接口测试.md
Normal 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. **高性能查询** - 使用响应式编程,支持高并发访问
|
||||
|
||||
前端可以根据这些接口实现丰富的用户界面,提供良好的用户体验。
|
||||
|
||||
Reference in New Issue
Block a user