Files
nl-video-api/docs/test-cases.md
2025-08-03 00:11:15 +08:00

751 lines
16 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# nl-video-api 接口测试用例文档
## 1. 测试环境配置
### 1.1 环境信息
- **测试服务器**: `http://localhost:8000`
- **数据库**: MySQL 8.0
- **缓存**: Redis 6.0
- **测试工具**: Postman, ApiPost, VS Code REST Client
### 1.2 测试数据准备
```sql
-- 初始化测试数据
INSERT INTO `admin` (`username`, `password`, `nickname`, `email`, `status`) VALUES
('admin', '$2a$10$...', '超级管理员', 'admin@example.com', 1),
('test_admin', '$2a$10$...', '测试管理员', 'test@example.com', 1);
INSERT INTO `user` (`username`, `phone`, `email`, `password`, `nickname`, `status`) VALUES
('testuser', '13800138000', 'user@example.com', '$2a$10$...', '测试用户', 1);
INSERT INTO `category` (`name`, `parent_id`, `sort`, `status`) VALUES
('动作片', 0, 1, 1),
('科幻片', 0, 2, 1),
('喜剧片', 0, 3, 1);
```
## 2. 认证模块测试用例
### 2.1 管理员登录测试
#### 测试用例 AUTH-001: 正常登录
**测试目的**: 验证管理员正常登录功能
**请求方式**: POST
**请求URL**: `/api/v1/auth/admin/login`
**请求参数**:
```json
{
"username": "admin",
"password": "123456"
}
```
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回Token和用户信息
#### 测试用例 AUTH-002: 用户名错误
**测试目的**: 验证用户名错误时的处理
**请求参数**:
```json
{
"username": "wronguser",
"password": "123456"
}
```
**预期结果**:
- 状态码: 400
- 响应码: 1101
- 错误信息: "用户名或密码错误"
#### 测试用例 AUTH-003: 密码错误
**测试目的**: 验证密码错误时的处理
**请求参数**:
```json
{
"username": "admin",
"password": "wrongpassword"
}
```
**预期结果**:
- 状态码: 400
- 响应码: 1101
- 错误信息: "用户名或密码错误"
#### 测试用例 AUTH-004: 参数缺失
**测试目的**: 验证必填参数缺失时的处理
**请求参数**:
```json
{
"username": "admin"
}
```
**预期结果**:
- 状态码: 400
- 响应码: 1001
- 错误信息: "参数错误"
### 2.2 Token验证测试
#### 测试用例 AUTH-005: 有效Token
**测试目的**: 验证有效Token的认证
**请求方式**: GET
**请求URL**: `/api/v1/auth/admin/info`
**请求头**: `Authorization: Bearer {valid_token}`
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回用户信息
#### 测试用例 AUTH-006: 无效Token
**测试目的**: 验证无效Token的处理
**请求头**: `Authorization: Bearer invalid_token`
**预期结果**:
- 状态码: 401
- 响应码: 1003
- 错误信息: "认证失败"
#### 测试用例 AUTH-007: Token缺失
**测试目的**: 验证Token缺失时的处理
**请求头**: 无Authorization头
**预期结果**:
- 状态码: 401
- 响应码: 1003
- 错误信息: "认证失败"
## 3. 影片管理模块测试用例
### 3.1 影片列表测试
#### 测试用例 MOVIE-001: 获取影片列表
**测试目的**: 验证影片列表查询功能
**请求方式**: GET
**请求URL**: `/api/v1/movies?page=1&page_size=20`
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回影片列表和分页信息
#### 测试用例 MOVIE-002: 按分类筛选
**请求URL**: `/api/v1/movies?category_id=1&page=1&page_size=10`
**预期结果**:
- 返回指定分类的影片列表
- 所有影片的category_id都为1
#### 测试用例 MOVIE-003: 按标题搜索
**请求URL**: `/api/v1/movies?title=复仇者&page=1&page_size=10`
**预期结果**:
- 返回标题包含"复仇者"的影片列表
### 3.2 影片创建测试
#### 测试用例 MOVIE-004: 创建电影
**测试目的**: 验证电影创建功能
**请求方式**: POST
**请求URL**: `/api/v1/admin/movies`
**请求头**: `Authorization: Bearer {admin_token}`
**请求参数**:
```json
{
"title": "测试电影",
"type": 1,
"category_id": 1,
"year": 2024,
"country": "中国",
"director": "测试导演",
"actors": "演员1,演员2",
"description": "这是一部测试电影",
"duration": 120,
"status": 1
}
```
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回创建的影片ID
#### 测试用例 MOVIE-005: 创建电视剧
**请求参数**:
```json
{
"title": "测试电视剧",
"type": 2,
"category_id": 1,
"year": 2024,
"country": "中国",
"total_episodes": 24,
"status": 1
}
```
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回创建的影片ID
#### 测试用例 MOVIE-006: 必填参数缺失
**请求参数**:
```json
{
"type": 1,
"category_id": 1
}
```
**预期结果**:
- 状态码: 400
- 响应码: 1001
- 错误信息: "参数错误"
### 3.3 影片更新测试
#### 测试用例 MOVIE-007: 更新影片信息
**请求方式**: PUT
**请求URL**: `/api/v1/admin/movies/1`
**请求参数**:
```json
{
"title": "更新后的标题",
"description": "更新后的描述"
}
```
**预期结果**:
- 状态码: 200
- 响应码: 0
- 影片信息更新成功
#### 测试用例 MOVIE-008: 更新不存在的影片
**请求URL**: `/api/v1/admin/movies/99999`
**预期结果**:
- 状态码: 404
- 响应码: 1005
- 错误信息: "资源不存在"
### 3.4 影片删除测试
#### 测试用例 MOVIE-009: 删除影片
**请求方式**: DELETE
**请求URL**: `/api/v1/admin/movies/1`
**预期结果**:
- 状态码: 200
- 响应码: 0
- 影片删除成功
## 4. 用户管理模块测试用例
### 4.1 用户列表测试
#### 测试用例 USER-001: 获取用户列表
**请求方式**: GET
**请求URL**: `/api/v1/admin/users?page=1&page_size=20`
**请求头**: `Authorization: Bearer {admin_token}`
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回用户列表和分页信息
#### 测试用例 USER-002: 按用户名搜索
**请求URL**: `/api/v1/admin/users?username=test&page=1&page_size=10`
**预期结果**:
- 返回用户名包含"test"的用户列表
### 4.2 用户创建测试
#### 测试用例 USER-003: 创建用户
**请求方式**: POST
**请求URL**: `/api/v1/admin/users`
**请求参数**:
```json
{
"username": "newuser",
"phone": "13800138001",
"email": "newuser@example.com",
"password": "123456",
"nickname": "新用户",
"gender": 1,
"status": 1
}
```
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回创建的用户ID
#### 测试用例 USER-004: 用户名重复
**请求参数**:
```json
{
"username": "testuser",
"phone": "13800138002",
"email": "test2@example.com",
"password": "123456",
"nickname": "重复用户"
}
```
**预期结果**:
- 状态码: 409
- 响应码: 1006
- 错误信息: "资源已存在"
### 4.3 VIP管理测试
#### 测试用例 USER-005: 升级VIP
**请求方式**: POST
**请求URL**: `/api/v1/admin/users/1/vip`
**请求参数**:
```json
{
"vip_level": 3,
"days": 30
}
```
**预期结果**:
- 状态码: 200
- 响应码: 0
- 用户VIP等级和到期时间更新
### 4.4 余额管理测试
#### 测试用例 USER-006: 更新余额
**请求方式**: PUT
**请求URL**: `/api/v1/admin/users/1/balance`
**请求参数**:
```json
{
"amount": 100.50,
"type": 1,
"remark": "测试充值"
}
```
**预期结果**:
- 状态码: 200
- 响应码: 0
- 用户余额增加100.50
## 5. 权限管理模块测试用例
### 5.1 角色管理测试
#### 测试用例 ROLE-001: 获取角色列表
**测试目的**: 验证角色列表查询功能
**请求方式**: GET
**请求URL**: `/api/v1/admin/roles?page=1&page_size=20`
**请求头**: `Authorization: Bearer {admin_token}`
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回角色列表和分页信息
#### 测试用例 ROLE-002: 创建角色
**请求方式**: POST
**请求URL**: `/api/v1/admin/roles`
**请求参数**:
```json
{
"name": "内容管理员",
"code": "content_admin",
"level": 3,
"description": "负责内容管理",
"sort": 10,
"status": 1
}
```
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回创建的角色ID
#### 测试用例 ROLE-003: 角色编码重复
**请求参数**:
```json
{
"name": "重复角色",
"code": "super_admin",
"level": 2
}
```
**预期结果**:
- 状态码: 409
- 响应码: 1504
- 错误信息: "角色编码已存在"
### 5.2 权限分配测试
#### 测试用例 ROLE-004: 为角色分配权限
**请求方式**: POST
**请求URL**: `/api/v1/admin/roles/1/permissions`
**请求参数**:
```json
{
"permission_ids": [1, 2, 3, 4, 5]
}
```
**预期结果**:
- 状态码: 200
- 响应码: 0
- 权限分配成功
#### 测试用例 ROLE-005: 获取角色权限
**请求方式**: GET
**请求URL**: `/api/v1/admin/roles/1/permissions`
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回角色的权限列表
### 5.3 权限管理测试
#### 测试用例 PERM-001: 获取权限树
**请求方式**: GET
**请求URL**: `/api/v1/admin/permissions/tree`
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回树形结构的权限列表
#### 测试用例 PERM-002: 创建权限
**请求方式**: POST
**请求URL**: `/api/v1/admin/permissions`
**请求参数**:
```json
{
"name": "新权限",
"code": "new:permission",
"type": 2,
"parent_id": 1,
"path": "/admin/new",
"method": "GET",
"sort": 1,
"status": 1
}
```
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回创建的权限ID
## 6. 分类管理模块测试用例
### 6.1 分类列表测试
#### 测试用例 CATEGORY-001: 获取分类列表
**请求方式**: GET
**请求URL**: `/api/v1/categories`
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回分类树形列表
#### 测试用例 CATEGORY-002: 创建分类
**请求方式**: POST
**请求URL**: `/api/v1/admin/categories`
**请求头**: `Authorization: Bearer {admin_token}`
**请求参数**:
```json
{
"name": "新分类",
"parent_id": 0,
"sort": 1,
"status": 1
}
```
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回创建的分类ID
## 7. 剧集管理模块测试用例
### 7.1 剧集列表测试
#### 测试用例 EPISODE-001: 获取剧集列表
**请求方式**: GET
**请求URL**: `/api/v1/admin/movies/1/episodes`
**请求头**: `Authorization: Bearer {admin_token}`
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回指定影片的剧集列表
#### 测试用例 EPISODE-002: 创建剧集
**请求方式**: POST
**请求URL**: `/api/v1/admin/movies/1/episodes`
**请求参数**:
```json
{
"episode_number": 1,
"title": "第1集",
"duration": 45,
"video_url": "episode1.mp4",
"status": 1
}
```
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回创建的剧集ID
## 8. 文件上传模块测试用例
### 8.1 文件上传测试
#### 测试用例 UPLOAD-001: 上传图片
**请求方式**: POST
**请求URL**: `/api/v1/upload`
**请求头**: `Authorization: Bearer {admin_token}`
**请求参数**: multipart/form-data
- file: 图片文件
- type: "image"
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回文件URL和相关信息
#### 测试用例 UPLOAD-002: 上传视频
**请求参数**: multipart/form-data
- file: 视频文件
- type: "video"
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回文件URL和相关信息
#### 测试用例 UPLOAD-003: 文件格式不支持
**请求参数**: multipart/form-data
- file: .exe文件
**预期结果**:
- 状态码: 400
- 响应码: 1702
- 错误信息: "文件格式不支持"
## 9. 搜索模块测试用例
### 9.1 全局搜索测试
#### 测试用例 SEARCH-001: 搜索影片
**请求方式**: GET
**请求URL**: `/api/v1/search?keyword=复仇者&type=movie&page=1&page_size=10`
**预期结果**:
- 状态码: 200
- 响应码: 0
- 返回匹配的影片列表
#### 测试用例 SEARCH-002: 搜索关键词为空
**请求URL**: `/api/v1/search?keyword=&type=movie`
**预期结果**:
- 状态码: 400
- 响应码: 1801
- 错误信息: "搜索关键词不能为空"
## 10. 性能测试用例
### 10.1 并发测试
#### 测试用例 PERF-001: 登录接口并发测试
**测试目的**: 验证登录接口在高并发下的性能
**测试方法**: 使用JMeter或Artillery进行压力测试
**测试参数**:
- 并发用户数: 100
- 持续时间: 60
- 请求间隔: 1
**预期结果**:
- 响应时间 < 500ms
- 成功率 > 99%
- 无内存泄漏
#### 测试用例 PERF-002: 影片列表接口性能测试
**测试参数**:
- 并发用户数: 200
- 持续时间: 120
**预期结果**:
- 响应时间 < 200ms
- 成功率 > 99.5%
### 10.2 数据库性能测试
#### 测试用例 PERF-003: 大数据量查询测试
**测试目的**: 验证在大数据量情况下的查询性能
**测试数据**: 100万条影片记录
**测试场景**:
- 分页查询
- 条件筛选
- 模糊搜索
**预期结果**:
- 查询响应时间 < 1
- 内存使用稳定
## 11. 安全测试用例
### 11.1 认证安全测试
#### 测试用例 SEC-001: SQL注入测试
**测试目的**: 验证系统对SQL注入攻击的防护
**测试方法**: 在各个输入参数中注入SQL语句
**测试参数**:
```json
{
"username": "admin'; DROP TABLE user; --",
"password": "123456"
}
```
**预期结果**:
- 系统正常处理不执行恶意SQL
- 返回参数错误或认证失败
#### 测试用例 SEC-002: XSS攻击测试
**测试参数**:
```json
{
"title": "<script>alert('XSS')</script>",
"description": "<img src=x onerror=alert('XSS')>"
}
```
**预期结果**:
- 恶意脚本被过滤或转义
- 不在页面中执行
### 11.2 权限安全测试
#### 测试用例 SEC-003: 越权访问测试
**测试目的**: 验证权限控制的有效性
**测试方法**: 使用普通用户Token访问管理员接口
**请求URL**: `/api/v1/admin/users`
**请求头**: `Authorization: Bearer {user_token}`
**预期结果**:
- 状态码: 403
- 响应码: 1004
- 错误信息: "权限不足"
## 12. 兼容性测试用例
### 12.1 浏览器兼容性测试
#### 测试用例 COMPAT-001: 不同浏览器测试
**测试目的**: 验证API在不同浏览器中的兼容性
**测试浏览器**:
- Chrome (最新版本)
- Firefox (最新版本)
- Safari (最新版本)
- Edge (最新版本)
**预期结果**:
- 所有浏览器都能正常调用API
- 响应格式一致
### 12.2 移动端兼容性测试
#### 测试用例 COMPAT-002: 移动端API测试
**测试设备**:
- iOS Safari
- Android Chrome
- 微信内置浏览器
**预期结果**:
- API调用正常
- 响应时间合理
## 13. 自动化测试脚本
### 13.1 测试脚本示例
#### PowerShell测试脚本
```powershell
# test_api.ps1
$baseUrl = "http://localhost:8000/api/v1"
$adminToken = ""
# 登录获取Token
function Get-AdminToken {
$loginData = @{
username = "admin"
password = "123456"
} | ConvertTo-Json
$response = Invoke-RestMethod -Uri "$baseUrl/auth/admin/login" -Method POST -Body $loginData -ContentType "application/json"
return $response.data.token
}
# 测试影片列表
function Test-MovieList {
param($token)
$headers = @{ Authorization = "Bearer $token" }
$response = Invoke-RestMethod -Uri "$baseUrl/movies" -Method GET -Headers $headers
Write-Host "影片列表测试: $($response.code -eq 0 ? 'PASS' : 'FAIL')"
}
# 执行测试
$adminToken = Get-AdminToken
Test-MovieList -token $adminToken
```
### 13.2 持续集成测试
#### GitHub Actions配置
```yaml
name: API Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Go
uses: actions/setup-go@v2
with:
go-version: 1.19
- name: Start Services
run: |
docker-compose up -d mysql redis
sleep 30
- name: Run Tests
run: |
go test ./...
./test_api.sh
```
## 14. 测试报告模板
### 14.1 测试执行报告
#### 测试概要
- **测试版本**: v1.0.0
- **测试环境**: 测试环境
- **测试时间**: 2024-01-01 ~ 2024-01-07
- **测试人员**: 测试团队
#### 测试结果统计
| 模块 | 总用例数 | 通过数 | 失败数 | 通过率 |
|------|----------|--------|--------|--------|
| 认证模块 | 10 | 10 | 0 | 100% |
| 影片管理 | 15 | 14 | 1 | 93.3% |
| 用户管理 | 12 | 12 | 0 | 100% |
| 权限管理 | 8 | 8 | 0 | 100% |
| **总计** | **45** | **44** | **1** | **97.8%** |
#### 缺陷统计
| 严重程度 | 数量 | 状态 |
|----------|------|------|
| 严重 | 0 | - |
| 一般 | 1 | 已修复 |
| 轻微 | 0 | - |
#### 性能测试结果
- **平均响应时间**: 150ms
- **最大并发数**: 500
- **系统稳定性**: 良好
### 14.2 测试建议
#### 改进建议
1. 增加更多的边界值测试用例
2. 完善异常场景的测试覆盖
3. 加强性能测试的监控指标
4. 建立自动化回归测试流程
#### 风险评估
- **高风险**:
- **中风险**: 大数据量查询性能需要持续关注
- **低风险**: 部分边界场景处理可以优化
---
**文档版本**: v1.0.0
**最后更新**: 2024-01-01
**维护者**: nl-video-api测试团队