You've already forked FrameTour-RenderWorker
test
This commit is contained in:
313
tests/README.md
Normal file
313
tests/README.md
Normal file
@@ -0,0 +1,313 @@
|
||||
# RenderWorker 测试文档
|
||||
|
||||
本目录包含 RenderWorker 项目的完整测试套件,用于验证特效参数生成和 FFmpeg 渲染功能。
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
tests/
|
||||
├── conftest.py # pytest 配置和公共 fixtures
|
||||
├── test_data/ # 测试数据
|
||||
│ ├── videos/ # 测试视频文件
|
||||
│ ├── templates/ # 测试模板数据
|
||||
│ └── expected_outputs/ # 预期输出结果
|
||||
├── test_effects/ # 特效单元测试
|
||||
│ ├── test_base.py # 基础类测试
|
||||
│ ├── test_zoom_effect.py # 缩放特效测试
|
||||
│ ├── test_speed_effect.py # 变速特效测试
|
||||
│ └── ... # 其他特效测试
|
||||
├── test_ffmpeg_builder/ # FFmpeg 命令构建测试
|
||||
│ └── test_ffmpeg_command_builder.py
|
||||
├── test_integration/ # 集成测试
|
||||
│ └── test_ffmpeg_execution.py # FFmpeg 执行测试
|
||||
└── utils/ # 测试工具
|
||||
└── test_helpers.py # 测试辅助函数
|
||||
```
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 1. 安装测试依赖
|
||||
|
||||
```bash
|
||||
pip install -r requirements-test.txt
|
||||
```
|
||||
|
||||
### 2. 运行测试
|
||||
|
||||
使用测试运行器脚本:
|
||||
|
||||
```bash
|
||||
# 运行所有测试
|
||||
python run_tests.py all --coverage
|
||||
|
||||
# 只运行单元测试
|
||||
python run_tests.py unit --coverage --html-report
|
||||
|
||||
# 只运行集成测试
|
||||
python run_tests.py integration
|
||||
|
||||
# 运行特定特效测试
|
||||
python run_tests.py effects --effect zoom
|
||||
|
||||
# 运行压力测试
|
||||
python run_tests.py stress
|
||||
```
|
||||
|
||||
或直接使用 pytest:
|
||||
|
||||
```bash
|
||||
# 运行所有测试
|
||||
pytest tests/ -v --cov=entity --cov=services
|
||||
|
||||
# 只运行单元测试
|
||||
pytest tests/test_effects/ tests/test_ffmpeg_builder/ -v
|
||||
|
||||
# 只运行集成测试
|
||||
pytest tests/test_integration/ -v -m integration
|
||||
|
||||
# 生成覆盖率报告
|
||||
pytest tests/ --cov=entity --cov=services --cov-report=html
|
||||
```
|
||||
|
||||
## 测试类型说明
|
||||
|
||||
### 单元测试 (Unit Tests)
|
||||
|
||||
位置:`tests/test_effects/`, `tests/test_ffmpeg_builder/`
|
||||
|
||||
测试内容:
|
||||
- 各个特效处理器的参数验证
|
||||
- FFmpeg 滤镜参数生成
|
||||
- 特效注册表功能
|
||||
- FFmpeg 命令构建逻辑
|
||||
|
||||
特点:
|
||||
- 运行速度快
|
||||
- 不依赖外部工具
|
||||
- 测试覆盖率高
|
||||
|
||||
### 集成测试 (Integration Tests)
|
||||
|
||||
位置:`tests/test_integration/`
|
||||
|
||||
测试内容:
|
||||
- 实际 FFmpeg 命令执行
|
||||
- 视频文件处理验证
|
||||
- 特效组合效果测试
|
||||
- 错误处理验证
|
||||
|
||||
依赖:
|
||||
- 需要系统安装 FFmpeg
|
||||
- 需要测试视频文件
|
||||
|
||||
### 压力测试 (Stress Tests)
|
||||
|
||||
测试内容:
|
||||
- 大量特效链处理
|
||||
- 长时间运行稳定性
|
||||
- 资源使用情况
|
||||
|
||||
运行条件:
|
||||
- 设置环境变量 `RUN_STRESS_TESTS=1`
|
||||
- 较长的超时时间
|
||||
|
||||
## 测试配置
|
||||
|
||||
### pytest 配置
|
||||
|
||||
在 `pytest.ini` 中配置:
|
||||
- 测试路径和文件模式
|
||||
- 覆盖率设置
|
||||
- 标记定义
|
||||
- 输出格式
|
||||
|
||||
### 环境变量
|
||||
|
||||
- `RUN_STRESS_TESTS`: 启用压力测试
|
||||
- `FFMPEG_PATH`: 自定义 FFmpeg 路径
|
||||
|
||||
## 特效测试详解
|
||||
|
||||
### 缩放特效 (ZoomEffect)
|
||||
|
||||
测试用例:
|
||||
- 有效参数验证:`"0,2.0,3.0"`(开始时间,缩放因子,持续时间)
|
||||
- 无效参数处理:负值、非数字、参数不足
|
||||
- 静态缩放:持续时间为 0
|
||||
- 动态缩放:指定时间段内的缩放
|
||||
- 位置 JSON 解析:自定义缩放中心点
|
||||
|
||||
生成滤镜格式:
|
||||
```
|
||||
# 静态缩放
|
||||
[0:v]trim=start=0,zoompan=z=2.0:x=iw/2:y=ih/2:d=1[v_eff1]
|
||||
|
||||
# 动态缩放
|
||||
[0:v]zoompan=z=if(between(t\,0\,3.0)\,2.0\,1):x=iw/2:y=ih/2:d=1[v_eff1]
|
||||
```
|
||||
|
||||
### 变速特效 (SpeedEffect)
|
||||
|
||||
测试用例:
|
||||
- 加速效果:`"2.0"`(2倍速)
|
||||
- 减速效果:`"0.5"`(0.5倍速)
|
||||
- 无效参数:零值、负值、非数字
|
||||
- 默认处理:空参数或 1.0 倍速
|
||||
|
||||
生成滤镜格式:
|
||||
```
|
||||
[0:v]setpts=2.0*PTS[v_eff1]
|
||||
```
|
||||
|
||||
## FFmpeg 命令构建测试
|
||||
|
||||
### 测试场景
|
||||
|
||||
1. **单文件复制**:直接复制无需编码
|
||||
2. **多文件拼接**:使用 concat 滤镜
|
||||
3. **特效处理**:复杂滤镜链构建
|
||||
4. **错误处理**:缺失文件、无效参数
|
||||
|
||||
### 命令验证
|
||||
|
||||
使用 `FFmpegValidator` 验证:
|
||||
- 命令结构完整性
|
||||
- 输入输出文件存在
|
||||
- 滤镜语法正确性
|
||||
- 流标识符格式
|
||||
|
||||
## 集成测试详解
|
||||
|
||||
### 真实 FFmpeg 执行
|
||||
|
||||
测试流程:
|
||||
1. 创建测试视频文件
|
||||
2. 构建 FFmpeg 命令
|
||||
3. 执行命令并检查返回码
|
||||
4. 验证输出文件存在且有效
|
||||
|
||||
### 测试用例
|
||||
|
||||
- 简单复制操作
|
||||
- 单特效处理
|
||||
- 多特效组合
|
||||
- 视频拼接
|
||||
- 错误情况处理
|
||||
|
||||
### 性能测试
|
||||
|
||||
监控指标:
|
||||
- 执行时间
|
||||
- 内存使用
|
||||
- 文件大小
|
||||
- 处理速度
|
||||
|
||||
## 代码覆盖率
|
||||
|
||||
目标覆盖率:≥ 70%
|
||||
|
||||
覆盖范围:
|
||||
- `entity/` 目录下的所有模块
|
||||
- `services/` 目录下的所有模块
|
||||
|
||||
报告格式:
|
||||
- XML 格式:用于 Jenkins CI/CD
|
||||
- HTML 格式:用于本地查看
|
||||
- 终端输出:实时查看缺失覆盖
|
||||
|
||||
## CI/CD 集成
|
||||
|
||||
### Jenkins Pipeline
|
||||
|
||||
配置文件:`Jenkinsfile`
|
||||
|
||||
阶段:
|
||||
1. 环境准备
|
||||
2. 代码质量检查
|
||||
3. 单元测试
|
||||
4. 集成测试
|
||||
5. 完整测试套件
|
||||
6. 性能测试
|
||||
|
||||
报告生成:
|
||||
- JUnit XML 测试报告
|
||||
- Cobertura 覆盖率报告
|
||||
- HTML 测试和覆盖率报告
|
||||
|
||||
### 自动化触发
|
||||
|
||||
- 代码提交时运行单元测试
|
||||
- PR 创建时运行完整测试
|
||||
- 主分支更新时运行包含性能测试的完整套件
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 常见问题
|
||||
|
||||
1. **FFmpeg 未找到**
|
||||
```bash
|
||||
# 安装 FFmpeg
|
||||
sudo apt-get install ffmpeg # Ubuntu/Debian
|
||||
brew install ffmpeg # macOS
|
||||
```
|
||||
|
||||
2. **测试视频创建失败**
|
||||
```bash
|
||||
# 手动创建测试视频
|
||||
python run_tests.py setup
|
||||
```
|
||||
|
||||
3. **覆盖率过低**
|
||||
- 检查是否有未测试的代码路径
|
||||
- 添加边界条件测试
|
||||
- 验证测试是否实际运行
|
||||
|
||||
4. **集成测试超时**
|
||||
- 增加超时时间:`--timeout=600`
|
||||
- 使用更小的测试文件
|
||||
- 检查系统资源使用情况
|
||||
|
||||
### 调试技巧
|
||||
|
||||
1. **查看详细输出**:
|
||||
```bash
|
||||
pytest tests/ -v -s
|
||||
```
|
||||
|
||||
2. **只运行失败的测试**:
|
||||
```bash
|
||||
pytest tests/ --lf
|
||||
```
|
||||
|
||||
3. **停在第一个失败**:
|
||||
```bash
|
||||
pytest tests/ -x
|
||||
```
|
||||
|
||||
4. **查看覆盖率详情**:
|
||||
```bash
|
||||
pytest tests/ --cov=entity --cov-report=term-missing
|
||||
```
|
||||
|
||||
## 贡献指南
|
||||
|
||||
### 添加新测试
|
||||
|
||||
1. 在相应目录创建测试文件
|
||||
2. 使用描述性的测试函数名
|
||||
3. 添加适当的测试标记
|
||||
4. 更新文档说明
|
||||
|
||||
### 测试最佳实践
|
||||
|
||||
1. **独立性**:每个测试应该独立运行
|
||||
2. **可重复性**:测试结果应该一致
|
||||
3. **清晰性**:测试意图应该明确
|
||||
4. **完整性**:覆盖正常和异常情况
|
||||
|
||||
### 代码质量
|
||||
|
||||
- 遵循 PEP 8 代码风格
|
||||
- 使用类型注解
|
||||
- 添加适当的文档字符串
|
||||
- 使用有意义的变量名
|
||||
Reference in New Issue
Block a user