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

16 KiB
Raw Permalink Blame History

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 测试建议

改进建议

  1. 增加更多的边界值测试用例
  2. 完善异常场景的测试覆盖
  3. 加强性能测试的监控指标
  4. 建立自动化回归测试流程

风险评估

  • 高风险: 无
  • 中风险: 大数据量查询性能需要持续关注
  • 低风险: 部分边界场景处理可以优化

文档版本: v1.0.0
最后更新: 2024-01-01
维护者: nl-video-api测试团队