751 lines
16 KiB
Go
751 lines
16 KiB
Go
|
|
# 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测试团队
|