|
|
||
|---|---|---|
| .. | ||
| real | ||
| README.md | ||
| conftest.py | ||
| test_asr_routes.py | ||
| test_core.py | ||
| test_integration.py | ||
| test_main.py | ||
| test_transcode_routes.py | ||
| test_utils.py | ||
README.md
项目测试套件文档
测试目录结构
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 命令
# 运行所有测试
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:使用运行脚本
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: 标记为单元测试
使用示例:
# 跳过慢速测试
pytest -m "not slow" -v
# 只运行集成测试
pytest -m integration -v
# 只运行单元测试
pytest -m unit -v
测试最佳实践
- 测试隔离: 每个测试应该是独立的,不依赖其他测试的状态
- 使用 fixtures: 优先使用提供的 fixtures 管理资源
- 清理资源: 测试完成后自动清理临时文件
- 断言明确: 每个测试应该有明确的断言
- 错误场景: 测试正常路径和错误路径
配置说明
pytest.ini
- 测试路径:
test/ - 测试文件模式:
test_*.py - 测试类模式:
Test* - 测试函数模式:
test_* - 详细输出:
-v - 严格标记:
--strict-markers
依赖要求
确保已安装以下依赖:
pip install pytest
pip install flask
pip install waitress
其他项目依赖见 requirements.txt
注意事项
- 部分测试可能需要实际的模型文件和服务依赖
- 转码测试需要 ffmpeg 支持
- GPU 相关测试需要 CUDA 环境
- 集成测试可能需要网络连接
故障排除
测试失败
- 检查依赖是否完整安装
- 检查文件路径是否正确
- 检查权限问题
- 查看详细错误输出
测试缓慢
- 使用
-m "not slow"跳过慢速测试 - 减少测试数据量
- 使用并行测试(pytest-xdist)
导入错误
- 确保在项目根目录运行
- 检查 PYTHONPATH 设置
- 确保 conftest.py 正确配置