# 项目测试套件文档 ## 测试目录结构 ``` 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 正确配置