Files
xiaoxia-saas/tests/render_compare/README_assets.md
T
xiaoxia 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: 成片中心后端升级(封面生成/复核/批量下载) (#287)
feat: 成片中心后端升级(封面生成/复核/批量下载)
2026-07-14 09:49:11 +08:00

202 lines
5.7 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 测试素材创建工具
`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. **清理测试数据**:测试完成后记得清理不需要的测试素材,避免占用资源。