Files
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

5.7 KiB
Executable File
Raw Permalink Blame History

测试素材创建工具

create_test_asset.py 是一个自动化测试辅助工具,用于快速创建 ready 状态的视频素材,跳过正常的上传和转码流程,直接指定已存在于 OSS 的文件来生成可用素材。

适用场景

  • 渲染对比测试:快速创建测试素材用于生成任务
  • 性能测试:批量创建素材模拟真实场景
  • 开发调试:无需真实上传文件即可测试素材相关功能

前置条件

  1. API 服务正在运行
  2. 有有效的登录 token
  3. 指定的 storage_key 对应的文件已存在于 OSS 中
  4. 用户对指定项目有访问权限

使用方法

基本用法

# 设置环境变量(可选)
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

完整参数示例

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

# 最后一行输出为 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

与渲染对比测试配合使用

# 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. 清理测试数据:测试完成后记得清理不需要的测试素材,避免占用资源。