SpeechRecognition/test
yueliuli 43edcd8b60 新增:增加测试脚本 2026-05-13 11:01:07 +08:00
..
real 新增:增加测试脚本 2026-05-13 11:01:07 +08:00
README.md 新增:增加测试脚本 2026-05-13 11:01:07 +08:00
conftest.py 新增:增加测试脚本 2026-05-13 11:01:07 +08:00
test_asr_routes.py 新增:增加测试脚本 2026-05-13 11:01:07 +08:00
test_core.py 新增:增加测试脚本 2026-05-13 11:01:07 +08:00
test_integration.py 新增:增加测试脚本 2026-05-13 11:01:07 +08:00
test_main.py 新增:增加测试脚本 2026-05-13 11:01:07 +08:00
test_transcode_routes.py 新增:增加测试脚本 2026-05-13 11:01:07 +08:00
test_utils.py 新增:增加测试脚本 2026-05-13 11:01:07 +08:00

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

测试最佳实践

  1. 测试隔离: 每个测试应该是独立的,不依赖其他测试的状态
  2. 使用 fixtures: 优先使用提供的 fixtures 管理资源
  3. 清理资源: 测试完成后自动清理临时文件
  4. 断言明确: 每个测试应该有明确的断言
  5. 错误场景: 测试正常路径和错误路径

配置说明

pytest.ini

  • 测试路径:test/
  • 测试文件模式:test_*.py
  • 测试类模式:Test*
  • 测试函数模式:test_*
  • 详细输出:-v
  • 严格标记:--strict-markers

依赖要求

确保已安装以下依赖:

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 正确配置