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