eb4645314d
CI/CD Pipeline / Validate Code Quality And Tests (push) Has been cancelled
CI/CD Pipeline / Unit Tests (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Frontend Lint (push) Has been cancelled
CI/CD Pipeline / Build & Push Staging (Watchtower auto-deploy) (push) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (push) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (push) Has been cancelled
CI/CD Pipeline / Build Production Runtime Images (push) Has been cancelled
CI/CD Pipeline / Deploy Production (push) Has been cancelled
CI/CD Pipeline / Production Browser E2E (push) Has been cancelled
feat: 成片中心后端升级(封面生成/复核/批量下载)
202 lines
5.7 KiB
Markdown
Executable File
202 lines
5.7 KiB
Markdown
Executable File
# 测试素材创建工具
|
||
|
||
`create_test_asset.py` 是一个自动化测试辅助工具,用于快速创建 `ready` 状态的视频素材,跳过正常的上传和转码流程,直接指定已存在于 OSS 的文件来生成可用素材。
|
||
|
||
## 适用场景
|
||
|
||
- 渲染对比测试:快速创建测试素材用于生成任务
|
||
- 性能测试:批量创建素材模拟真实场景
|
||
- 开发调试:无需真实上传文件即可测试素材相关功能
|
||
|
||
## 前置条件
|
||
|
||
1. API 服务正在运行
|
||
2. 有有效的登录 token
|
||
3. 指定的 `storage_key` 对应的文件已存在于 OSS 中
|
||
4. 用户对指定项目有访问权限
|
||
|
||
## 使用方法
|
||
|
||
### 基本用法
|
||
|
||
```bash
|
||
# 设置环境变量(可选)
|
||
export API_BASE_URL=http://localhost:8000
|
||
export API_TOKEN=your_token_here
|
||
|
||
# 创建测试素材
|
||
python tests/render_compare/create_test_asset.py \
|
||
--project-id proj_xxx \
|
||
--name "测试素材-30s" \
|
||
--storage-key "assets/test/sample_30s.mp4" \
|
||
--duration 30 \
|
||
--file-size 10485760
|
||
```
|
||
|
||
### 完整参数示例
|
||
|
||
```bash
|
||
python tests/render_compare/create_test_asset.py \
|
||
--base-url http://localhost:8000 \
|
||
--token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... \
|
||
--project-id proj_a1b2c3d4e5f6 \
|
||
--name "1080p测试视频-60s" \
|
||
--storage-key "test-assets/1080p_60fps_60s.mp4" \
|
||
--duration 60 \
|
||
--width 1920 \
|
||
--height 1080 \
|
||
--fps 60 \
|
||
--mime-type "video/mp4" \
|
||
--file-size 52428800 \
|
||
--codec "h264" \
|
||
--kind video
|
||
```
|
||
|
||
### 在脚本中捕获 asset_id
|
||
|
||
```bash
|
||
# 最后一行输出为 asset_id,方便脚本捕获
|
||
ASSET_ID=$(python tests/render_compare/create_test_asset.py \
|
||
--project-id proj_xxx \
|
||
--name "测试素材" \
|
||
--storage-key "test/video.mp4" \
|
||
2>&1 | tail -1)
|
||
|
||
echo "创建的素材 ID: $ASSET_ID"
|
||
```
|
||
|
||
## 参数说明
|
||
|
||
| 参数 | 环境变量 | 必填 | 默认值 | 说明 |
|
||
|------|----------|------|--------|------|
|
||
| `--base-url` | `API_BASE_URL` | 否 | `http://localhost:8000` | API 服务地址 |
|
||
| `--token` | `API_TOKEN` | 是 | - | 登录认证 token |
|
||
| `--project-id` | - | 是 | - | 项目 ID |
|
||
| `--name` | - | 是 | - | 素材名称 |
|
||
| `--storage-key` | - | 是 | - | OSS storage_key(文件需已存在) |
|
||
| `--duration` | - | 否 | `30` | 视频时长(秒) |
|
||
| `--width` | - | 否 | `1280` | 视频宽度 |
|
||
| `--height` | - | 否 | `720` | 视频高度 |
|
||
| `--fps` | - | 否 | `25` | 帧率 |
|
||
| `--mime-type` | - | 否 | `video/mp4` | MIME 类型 |
|
||
| `--file-size` | - | 否 | `0` | 文件大小(字节) |
|
||
| `--codec` | - | 否 | - | 视频编码 |
|
||
| `--kind` | - | 否 | `video` | 素材库类型 (video/voice/image) |
|
||
|
||
## API 调用流程
|
||
|
||
脚本会依次调用以下 API:
|
||
|
||
### 1. 确保默认素材库存在
|
||
|
||
```
|
||
POST /api/v1/asset-libraries/ensure-default
|
||
Content-Type: application/json
|
||
Authorization: Bearer {token}
|
||
|
||
{
|
||
"project_id": "proj_xxx",
|
||
"kind": "video"
|
||
}
|
||
```
|
||
|
||
- 如果项目下已有对应类型的素材库,直接返回第一个
|
||
- 如果不存在,自动创建默认名称的素材库
|
||
|
||
### 2. 创建素材
|
||
|
||
```
|
||
POST /api/v1/assets
|
||
Content-Type: application/json
|
||
Authorization: Bearer {token}
|
||
|
||
{
|
||
"project_id": "proj_xxx",
|
||
"library_id": "lib_xxx",
|
||
"name": "测试素材",
|
||
"storage_key": "assets/test/video.mp4",
|
||
"mime_type": "video/mp4",
|
||
"file_size": 10485760,
|
||
"duration": 30,
|
||
"width": 1280,
|
||
"height": 720,
|
||
"fps": 25,
|
||
"status": "ready",
|
||
"classification_status": "pending",
|
||
"metadata": {}
|
||
}
|
||
```
|
||
|
||
**关键点**:
|
||
- `status: "ready"` 直接跳过转码流程,立即可用
|
||
- `storage_key` 必须对应 OSS 中真实存在的文件,否则播放会失败
|
||
- `uploaded_by_user_id` 由 API 自动设置为当前登录用户
|
||
|
||
## 输出说明
|
||
|
||
脚本输出分为三部分:
|
||
|
||
1. **参数回显**:确认输入的参数是否正确
|
||
2. **执行日志**:显示每一步的执行情况
|
||
3. **结果输出**:
|
||
- 素材详细信息(asset_id、状态、文件 URL 等)
|
||
- 调用示例
|
||
- 最后一行为纯 asset_id,方便脚本捕获
|
||
|
||
## 错误排查
|
||
|
||
### 常见错误
|
||
|
||
#### 401 Unauthorized
|
||
- 检查 token 是否正确且未过期
|
||
- 确认 Authorization header 格式为 `Bearer {token}`
|
||
|
||
#### 403 Forbidden
|
||
- 确认用户对该项目有访问权限
|
||
- 检查项目 ID 是否正确
|
||
|
||
#### 404 Project not found
|
||
- 项目 ID 错误或项目不存在
|
||
|
||
#### 422 Validation Error
|
||
- 检查参数格式是否正确
|
||
- 查看响应中的 detail 字段了解具体错误
|
||
|
||
### 调试技巧
|
||
|
||
脚本在 API 失败时会打印完整的响应内容,包括:
|
||
- HTTP 状态码
|
||
- 错误原因
|
||
- 响应 body 详情
|
||
|
||
如果遇到问题,请检查:
|
||
1. API 服务是否正常运行
|
||
2. base-url 是否正确(注意端口号)
|
||
3. token 是否有效
|
||
4. storage_key 对应的文件是否存在于 OSS
|
||
|
||
## 与渲染对比测试配合使用
|
||
|
||
```bash
|
||
# 1. 创建测试素材
|
||
ASSET_ID=$(python tests/render_compare/create_test_asset.py \
|
||
--project-id proj_xxx \
|
||
--name "渲染对比测试素材" \
|
||
--storage-key "test-assets/base_1080p_30s.mp4" \
|
||
--duration 30 --width 1920 --height 1080 \
|
||
2>&1 | tail -1)
|
||
|
||
# 2. 使用该素材运行渲染对比测试
|
||
python tests/render_compare/runner.py \
|
||
--project-id proj_xxx \
|
||
--asset-id $ASSET_ID \
|
||
--scenario quality_test
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
1. **storage_key 必须真实存在**:脚本不会上传文件,只是创建数据库记录。如果 OSS 中没有对应文件,素材虽然状态是 ready,但无法正常播放。
|
||
2. **素材参数要准确**:duration、width、height、fps 等参数应与实际文件一致,否则可能导致后续渲染或分析出现偏差。
|
||
3. **权限检查**:确保 token 对应用户有项目的素材创建权限。
|
||
4. **清理测试数据**:测试完成后记得清理不需要的测试素材,避免占用资源。
|