195 lines
4.3 KiB
Markdown
195 lines
4.3 KiB
Markdown
# 项目测试套件文档
|
||
|
||
## 测试目录结构
|
||
|
||
```
|
||
test/
|
||
├── conftest.py # Pytest 配置和全局 fixtures
|
||
├── test_main.py # 测试应用创建和主入口
|
||
├── test_asr_routes.py # 测试 ASR 语音识别路由
|
||
├── test_transcode_routes.py # 测试转码路由
|
||
├── test_utils.py # 测试工具函数和配置
|
||
├── test_core.py # 测试核心功能模块
|
||
└── test_integration.py # 集成测试
|
||
```
|
||
|
||
## 依赖
|
||
|
||
### 测试 覆盖测试
|
||
pip install pytest pytest-cov pyyaml pytest-timeout
|
||
|
||
## 运行测试
|
||
|
||
### 方式 1:使用 pytest 命令
|
||
```bash
|
||
# 运行所有测试
|
||
pytest test/ -v
|
||
|
||
# 运行特定测试文件
|
||
pytest test/test_main.py -v
|
||
|
||
# 运行特定测试类
|
||
pytest test/test_main.py::TestAppCreation -v
|
||
|
||
# 运行特定测试函数
|
||
pytest test/test_main.py::TestAppCreation::test_create_app_returns_flask_app -v
|
||
|
||
# 运行带标记的测试
|
||
pytest -m "not slow" -v
|
||
```
|
||
|
||
### 方式 2:使用运行脚本
|
||
```bash
|
||
python run_tests.py
|
||
```
|
||
|
||
## 测试覆盖范围
|
||
|
||
### 1. 应用创建测试 (test_main.py)
|
||
- ✅ Flask 应用创建
|
||
- ✅ 配置加载
|
||
- ✅ 路由注册
|
||
- ✅ CORS 配置
|
||
- ✅ 根路由响应
|
||
|
||
### 2. ASR 路由测试 (test_asr_routes.py)
|
||
- ✅ 语音识别接口 (`/api/recognize`)
|
||
- 参数验证
|
||
- 错误处理
|
||
- 响应格式
|
||
- ✅ 结果获取接口 (`/api/result`)
|
||
- 参数验证
|
||
- 文件存在性检查
|
||
- 结果返回
|
||
- ✅ 全局状态管理
|
||
- ✅ ASR 服务类
|
||
- ✅ 说话人分离服务类
|
||
|
||
### 3. 转码路由测试 (test_transcode_routes.py)
|
||
- ✅ 视频转码接口 (`/api/convert`)
|
||
- 参数验证
|
||
- 文件存在性检查
|
||
- 错误处理
|
||
- ✅ 视频 URL 获取接口 (`/api/getVidUrl`)
|
||
- 参数验证
|
||
- URL 生成
|
||
- ✅ 支持的视频格式
|
||
- ✅ 输出目录管理
|
||
|
||
### 4. 工具函数测试 (test_utils.py)
|
||
- ✅ `make_response` 函数
|
||
- 默认响应
|
||
- 自定义状态
|
||
- 数据封装
|
||
- 错误处理
|
||
- 时间戳格式
|
||
- ✅ CORS 注册
|
||
- ✅ 配置验证
|
||
|
||
### 5. 核心功能测试 (test_core.py)
|
||
- ✅ 视频列表获取
|
||
- ✅ 临时目录管理
|
||
- ✅ WAV 音频提取
|
||
- ✅ ASR 服务类
|
||
- ✅ 说话人分离服务类
|
||
- ✅ 转码核心函数
|
||
- ✅ Caddy 运行
|
||
|
||
### 6. 集成测试 (test_integration.py)
|
||
- ✅ 完整应用启动
|
||
- ✅ 所有路由响应
|
||
- ✅ 错误处理一致性
|
||
- ✅ 模块隔离
|
||
- ✅ 配置隔离
|
||
- ✅ 并发请求
|
||
- ✅ 全局状态
|
||
- ✅ 路径处理
|
||
- ✅ 资源清理
|
||
|
||
## Fixtures
|
||
|
||
### 全局 Fixtures (conftest.py)
|
||
|
||
- `app`: Flask 应用实例
|
||
- `client`: 测试客户端
|
||
- `temp_dirs`: 临时目录集合
|
||
- `root`: 根目录
|
||
- `input`: 输入目录
|
||
- `output`: 输出目录
|
||
- `temp`: 临时目录
|
||
- `clean_temp`: 清理临时目录
|
||
- `sample_audio_file`: 示例音频文件路径
|
||
- `sample_video_file`: 示例视频文件路径
|
||
|
||
## 测试标记
|
||
|
||
- `slow`: 标记为慢速测试
|
||
- `integration`: 标记为集成测试
|
||
- `unit`: 标记为单元测试
|
||
|
||
使用示例:
|
||
```bash
|
||
# 跳过慢速测试
|
||
pytest -m "not slow" -v
|
||
|
||
# 只运行集成测试
|
||
pytest -m integration -v
|
||
|
||
# 只运行单元测试
|
||
pytest -m unit -v
|
||
```
|
||
|
||
## 测试最佳实践
|
||
|
||
1. **测试隔离**: 每个测试应该是独立的,不依赖其他测试的状态
|
||
2. **使用 fixtures**: 优先使用提供的 fixtures 管理资源
|
||
3. **清理资源**: 测试完成后自动清理临时文件
|
||
4. **断言明确**: 每个测试应该有明确的断言
|
||
5. **错误场景**: 测试正常路径和错误路径
|
||
|
||
## 配置说明
|
||
|
||
### pytest.ini
|
||
- 测试路径:`test/`
|
||
- 测试文件模式:`test_*.py`
|
||
- 测试类模式:`Test*`
|
||
- 测试函数模式:`test_*`
|
||
- 详细输出:`-v`
|
||
- 严格标记:`--strict-markers`
|
||
|
||
## 依赖要求
|
||
|
||
确保已安装以下依赖:
|
||
```bash
|
||
pip install pytest
|
||
pip install flask
|
||
pip install waitress
|
||
```
|
||
|
||
其他项目依赖见 `requirements.txt`
|
||
|
||
## 注意事项
|
||
|
||
1. 部分测试可能需要实际的模型文件和服务依赖
|
||
2. 转码测试需要 ffmpeg 支持
|
||
3. GPU 相关测试需要 CUDA 环境
|
||
4. 集成测试可能需要网络连接
|
||
|
||
## 故障排除
|
||
|
||
### 测试失败
|
||
1. 检查依赖是否完整安装
|
||
2. 检查文件路径是否正确
|
||
3. 检查权限问题
|
||
4. 查看详细错误输出
|
||
|
||
### 测试缓慢
|
||
1. 使用 `-m "not slow"` 跳过慢速测试
|
||
2. 减少测试数据量
|
||
3. 使用并行测试(pytest-xdist)
|
||
|
||
### 导入错误
|
||
1. 确保在项目根目录运行
|
||
2. 检查 PYTHONPATH 设置
|
||
3. 确保 conftest.py 正确配置
|