Files
game_server/docs/链接状态接口测试.md
2025-08-26 15:18:14 +08:00

6.2 KiB
Raw Permalink Blame History

链接状态接口测试文档

接口概览

新增了三个接口用于前端获取链接状态信息:

  1. 获取链接状态 - GET /api/link/{codeNo}/status
  2. 检查链接是否存在 - GET /api/link/{codeNo}/exists
  3. 检查链接是否有效 - GET /api/link/{codeNo}/valid

测试步骤

1. 准备工作

首先需要生成一个链接用于测试:

# 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中带上

Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...

2. 生成测试链接

# 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
  }'

响应示例:

{
    "batchId": 123,
    "deductPoints": 250,
    "expireAt": "2024-01-15T16:30:00",
    "codeNos": ["ABC12345", "DEF67890"]
}

记录其中一个 codeNo,比如 ABC12345,用于后续测试。

3. 测试获取链接状态接口

# 3. 获取链接状态
curl -X GET http://localhost:18080/api/link/ABC12345/status \
  -H "Accept: application/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. 测试检查链接是否存在接口

# 4. 检查链接是否存在
curl -X GET http://localhost:18080/api/link/ABC12345/exists \
  -H "Accept: application/json"

预期响应: true

5. 测试检查链接是否有效接口

# 5. 检查链接是否有效
curl -X GET http://localhost:18080/api/link/ABC12345/valid \
  -H "Accept: application/json"

预期响应: true

6. 测试错误情况

6.1 测试不存在的链接

# 测试不存在的链接
curl -X GET http://localhost:18080/api/link/INVALID123/status \
  -H "Accept: application/json"

预期响应:

{
    "timestamp": "2024-01-15T12:00:00.000+00:00",
    "status": 400,
    "error": "Bad Request",
    "message": "链接不存在: INVALID123",
    "path": "/api/link/INVALID123/status"
}

6.2 测试空链接编号

# 测试空链接编号
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. 状态一致性验证

  • 如果 statusEXPIRED,那么 isExpired 应该是 true
  • 如果 statusLOGGED_IN,那么 loginAt 不应该为 null

3. 时间验证

  • createdAtupdatedAt
  • expireAt > createdAt
  • 如果 loginAt 不为空,那么 loginAtcreatedAt

性能测试

1. 响应时间测试

# 使用time命令测试响应时间
time curl -X GET http://localhost:18080/api/link/ABC12345/status

2. 并发测试

# 使用ab工具进行并发测试
ab -n 100 -c 10 http://localhost:18080/api/link/ABC12345/status

错误处理测试

1. 数据库连接异常

模拟数据库连接失败的情况,验证错误处理。

2. 网络超时

模拟网络延迟,验证超时处理。

3. 内存不足

模拟内存不足情况,验证系统稳定性。

安全测试

1. 权限验证

# 不带JWT令牌访问应该被拦截
curl -X GET http://localhost:18080/api/link/ABC12345/status

2. SQL注入防护

# 测试SQL注入
curl -X GET "http://localhost:18080/api/link/ABC12345'; DROP TABLE link_task; --/status"

3. XSS防护

# 测试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测试

@SpringBootTest
@AutoConfigureTestDatabase
class LinkStatusControllerTest {
    
    @Test
    void testGetLinkStatus() {
        // 测试获取链接状态
    }
    
    @Test
    void testLinkNotExists() {
        // 测试链接不存在的情况
    }
}

总结

这些接口为前端提供了完整的链接状态查询功能,支持:

  1. 完整的状态信息 - 包括任务详情、过期时间、奖励点数等
  2. 实时状态计算 - 自动计算是否过期、剩余时间等
  3. 友好的错误处理 - 提供清晰的错误信息和状态码
  4. 高性能查询 - 使用响应式编程,支持高并发访问

前端可以根据这些接口实现丰富的用户界面,提供良好的用户体验。