275 lines
6.2 KiB
Markdown
275 lines
6.2 KiB
Markdown
# 链接状态接口测试文档
|
||
|
||
## 接口概览
|
||
|
||
新增了三个接口用于前端获取链接状态信息:
|
||
|
||
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. **高性能查询** - 使用响应式编程,支持高并发访问
|
||
|
||
前端可以根据这些接口实现丰富的用户界面,提供良好的用户体验。
|