16 KiB
nl-video-api 接口测试用例文档
1. 测试环境配置
1.1 环境信息
- 测试服务器:
http://localhost:8000 - 数据库: MySQL 8.0
- 缓存: Redis 6.0
- 测试工具: Postman, ApiPost, VS Code REST Client
1.2 测试数据准备
-- 初始化测试数据
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
请求参数:
{
"username": "admin",
"password": "123456"
}
预期结果:
- 状态码: 200
- 响应码: 0
- 返回Token和用户信息
测试用例 AUTH-002: 用户名错误
测试目的: 验证用户名错误时的处理
请求参数:
{
"username": "wronguser",
"password": "123456"
}
预期结果:
- 状态码: 400
- 响应码: 1101
- 错误信息: "用户名或密码错误"
测试用例 AUTH-003: 密码错误
测试目的: 验证密码错误时的处理
请求参数:
{
"username": "admin",
"password": "wrongpassword"
}
预期结果:
- 状态码: 400
- 响应码: 1101
- 错误信息: "用户名或密码错误"
测试用例 AUTH-004: 参数缺失
测试目的: 验证必填参数缺失时的处理
请求参数:
{
"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}
请求参数:
{
"title": "测试电影",
"type": 1,
"category_id": 1,
"year": 2024,
"country": "中国",
"director": "测试导演",
"actors": "演员1,演员2",
"description": "这是一部测试电影",
"duration": 120,
"status": 1
}
预期结果:
- 状态码: 200
- 响应码: 0
- 返回创建的影片ID
测试用例 MOVIE-005: 创建电视剧
请求参数:
{
"title": "测试电视剧",
"type": 2,
"category_id": 1,
"year": 2024,
"country": "中国",
"total_episodes": 24,
"status": 1
}
预期结果:
- 状态码: 200
- 响应码: 0
- 返回创建的影片ID
测试用例 MOVIE-006: 必填参数缺失
请求参数:
{
"type": 1,
"category_id": 1
}
预期结果:
- 状态码: 400
- 响应码: 1001
- 错误信息: "参数错误"
3.3 影片更新测试
测试用例 MOVIE-007: 更新影片信息
请求方式: PUT
请求URL: /api/v1/admin/movies/1
请求参数:
{
"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
请求参数:
{
"username": "newuser",
"phone": "13800138001",
"email": "newuser@example.com",
"password": "123456",
"nickname": "新用户",
"gender": 1,
"status": 1
}
预期结果:
- 状态码: 200
- 响应码: 0
- 返回创建的用户ID
测试用例 USER-004: 用户名重复
请求参数:
{
"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
请求参数:
{
"vip_level": 3,
"days": 30
}
预期结果:
- 状态码: 200
- 响应码: 0
- 用户VIP等级和到期时间更新
4.4 余额管理测试
测试用例 USER-006: 更新余额
请求方式: PUT
请求URL: /api/v1/admin/users/1/balance
请求参数:
{
"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
请求参数:
{
"name": "内容管理员",
"code": "content_admin",
"level": 3,
"description": "负责内容管理",
"sort": 10,
"status": 1
}
预期结果:
- 状态码: 200
- 响应码: 0
- 返回创建的角色ID
测试用例 ROLE-003: 角色编码重复
请求参数:
{
"name": "重复角色",
"code": "super_admin",
"level": 2
}
预期结果:
- 状态码: 409
- 响应码: 1504
- 错误信息: "角色编码已存在"
5.2 权限分配测试
测试用例 ROLE-004: 为角色分配权限
请求方式: POST
请求URL: /api/v1/admin/roles/1/permissions
请求参数:
{
"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
请求参数:
{
"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}
请求参数:
{
"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
请求参数:
{
"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语句
测试参数:
{
"username": "admin'; DROP TABLE user; --",
"password": "123456"
}
预期结果:
- 系统正常处理,不执行恶意SQL
- 返回参数错误或认证失败
测试用例 SEC-002: XSS攻击测试
测试参数:
{
"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测试脚本
# 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配置
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 测试建议
改进建议
- 增加更多的边界值测试用例
- 完善异常场景的测试覆盖
- 加强性能测试的监控指标
- 建立自动化回归测试流程
风险评估
- 高风险: 无
- 中风险: 大数据量查询性能需要持续关注
- 低风险: 部分边界场景处理可以优化
文档版本: v1.0.0
最后更新: 2024-01-01
维护者: nl-video-api测试团队