# 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": "",
"description": "
"
}
```
**预期结果**:
- 恶意脚本被过滤或转义
- 不在页面中执行
### 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测试团队