菜单

测试

相关源文件

本文档介绍了 you-get 代码库的测试系统,涵盖了手动和自动测试方法。它解释了如何运行现有测试、编写新测试以及确保您的贡献在不同的 Python 版本中都能正常工作。有关持续集成的信息,请参阅 持续集成

测试架构

You-get 使用 Python 内置的 unittest 框架作为其测试套件。测试主要侧重于通过检查提取器从各种媒体站点检索元数据的能力来验证它们。

测试流程图

来源: tests/test.py19-71

测试文件结构

来源: tests/test.py19-71

运行测试

运行完整测试套件

您可以使用 make 命令运行整个测试套件

这将执行 YouGetTests 类中所有未被注释掉的测试方法。

运行单个测试

要运行特定测试,您可以直接使用 unittest 模块

这在您处理特定提取器且只需要测试一个时非常有用。

测试执行流程

来源: tests/test.py19-71 src/you_get/extractors/tiktok.py7-44

编写测试

测试用例结构

you-get 中的测试用例遵循简单的模式

  1. 导入要测试的提取器模块
  2. 定义一个调用提取器 download 函数的测试方法
  3. 传递 info_only=True 以在不下载的情况下检查提取
  4. 提供一个应该能与提取器一起工作的 URL

示例:TikTok 测试

TikTok 测试用例展示了对多种 URL 格式的测试,演示了如何测试同一提取器的不同 URL 模式

来源: tests/test.py59-63

测试基础设施

You-get 使用 GitHub Actions 在多个 Python 版本上进行自动测试,以确保与不同 Python 环境的兼容性。

支持的 Python 版本

测试套件在 Python 版本矩阵上运行

来源: .github/workflows/python-package.yml12-18

CI 工作流程

来源: .github/workflows/python-package.yml4-39

手动测试技术

虽然自动化测试涵盖了许多情况,但手动测试通常是必需的,尤其是在

  1. 开发新提取器
  2. 修复损坏的提取器
  3. 处理需要身份验证的网站时

手动测试流程

要手动测试提取器

  1. 使用 --debug 选项运行 you-get,以查看完整的提取过程

  2. 使用 --info 选项,仅显示元数据而不下载

  3. 直接从 Python shell 运行特定的提取器代码

测试最佳实践

  1. 使用 info_only=True 进行测试 - 这允许在不实际下载大型媒体文件的情况下测试提取逻辑。

  2. 使用稳定的 URL - 选择可能长期保持可用的媒体 URL。

  3. 测试多个 URL 格式 - 如 TikTok 测试所示,包含同一网站的不同 URL 变体。

  4. 注释掉失败的测试 - 不要删除不再工作的测试,而是注释掉它们并附带解释。

  5. 为新提取器添加测试 - 创建新提取器时,添加相应的测试用例。

  6. 跨 Python 版本测试 - 确保您的代码与所有支持的 Python 版本都能正常工作。

故障排除测试

运行测试时常见的问��包括

  1. 网络连接 - 由于网络问题或网站更改,测试可能会失败
  2. 网站限制 - 某些网站可能会阻止自动化请求
  3. API 更改 - 网站更新可能会导致提取器中断

在修复测试时,应专注于更新提取器代码,而不是修改测试预期,因为测试反映了预期的行为。

来源: tests/test.py19-71 .github/workflows/python-package.yml4-39