菜单

提取器测试

相关源文件

本文档全面概述了用于验证 youtube-dl 中提取器功能的测试框架。提取器负责解析网站内容并提取媒体信息。测试提取器对于确保它们能够正确识别、解析并为各种媒体平台返回有效信息至关重要。

有关通用测试框架的信息,请参阅 测试框架,有关下载特定测试的信息,请参阅 下载测试

1. 提取器测试框架概述

youtube-dl 提取器测试系统旨在验证提取器是否能正确地从支持的平台提取元数据和下载媒体文件。该框架通过以下方式工作:

  1. 从测试文件中加载测试用例定义
  2. 为每个定义的测试用例动态生成测试方法
  3. 通过尝试提取信息并选择性地下载媒体来执行每个测试
  4. 验证提取的信息是否与预期值匹配
  5. 在适当时验证下载的文件

测试框架通过 youtube-dl 特定的功能扩展了标准的 Python unittest 框架。

来源: test/test_download.py72-290

2. 测试组件和类

提取器测试系统包含几个关键组件:

2.1 用于测试的自定义 YoutubeDL 类

该框架定义了一个自定义 YoutubeDL 类,该类通过特定于测试的功能扩展了主 youtube_dl.YoutubeDL 类。

  • 捕获已处理的信息字典以进行验证
  • 将警告转换为错误以强制执行严格测试
  • 将 stderr 重定向到 stdout 以实现一致的测试输出

来源: test/test_download.py52-64

2.2 TestDownload 类

TestDownload 类是主要的测试类,其中包含为每个定义的测试用例动态生成的测试方法。每个测试方法都遵循 test_<extractor_name> 的命名约定,并在运行时生成。

来源: test/test_download.py75-94 test/test_download.py279-290

3. 测试定义结构

提取器测试定义在测试用例文件中,这些文件包含有关要为每个提取器测试的内容的结构化信息。测试框架使用 gettestcases() 函数加载这些定义。

3.1 测试用例属性

每个测试用例可以包含以下属性:

属性描述
名称要测试的提取器名称
url要提取信息的 URL
info_dict包含元数据的预期信息字典
params测试的自定义参数
skip跳过测试的原因(如果适用)
add_ie测试所需的附加提取器
playlist播放列表项的测试用例
playlist_mincount播放列表中预期的最小项目数
playlist_maxcount播放列表中预期的最大项目数
playlist_count播放列表中预期的确切项目数
file_minsize预期的最小文件大小
md5下载文件的预期 MD5 哈希值

来源: test/test_download.py100-169

3.2 默认测试参数

测试使用在 test/parameters.json 中定义的默认参数,这些参数可以被特定于测试的参数覆盖。

{
    "outtmpl": "%(id)s.%(ext)s",
    "test": true,
    "writeinfojson": true,
    "verbose": true,
    "format": "best"
    // Additional parameters...
}

来源: test/parameters.json1-42

4. 测试执行流程

提取器测试的执行遵循详细的工作流程:

来源: test/test_download.py162-266

4.1 验证机制

测试框架采用多种验证机制:

  1. 提取信息验证:将提取的 info_dict 与预期的 info_dict 进行比较。
  2. 文件存在性检查:验证下载的文件是否存在。
  3. 文件大小验证:检查文件大小是否满足最小要求。
  4. MD5 校验和:如果指定,则使用 MD5 哈希值验证文件完整性。
  5. Info JSON 验证:确保元数据 JSON 文件已正确写入并包含预期信息。

来源: test/test_download.py225-266

4.2 重试机制

该框架包含用于处理瞬时网络问题的重试机制。

默认重试次数设置为 3 次,以处理瞬时网络问题。

来源: test/test_download.py163-188 test/test_download.py43

5. 播放列表测试

提取器测试框架对播放列表有特殊处理。

  1. 测试可以指定预期的播放列表属性,如最小数量、最大数量或确切数量。
  2. 框架可以在不下载所有视频的情况下提取播放列表信息。
  3. 测试用例可以验证所有播放列表项的总时长。

来源: test/test_download.py190-221

6. 添加新的提取器测试

要添加新的提取器测试,请执行以下操作:

  1. 创建包含必需属性(名称、URL、info_dict)的测试定义。
  2. 在 info_dict 中指定预期的元数据。
  3. 添加所需的任何特殊参数或验证机制。
  4. 添加到相应的测试定义文件中。

新测试会被测试框架自动发现并执行。

6.1 示例测试定义结构

来源: test/test_download.py100-110

7. 测试执行过程

实际测试执行遵循以下过程:

  1. unittest 框架发现并运行测试方法。
  2. 每个测试方法使用适当的参数设置 YouTube-DL 实例。
  3. 测试从指定 URL 提取信息。
  4. 提取的信息将根据预期值进行验证。
  5. 如果未跳过下载,则检查下载的文件的大小和内容。
  6. 测试清理会删除测试过程中创建的任何文件。

7.1 并行化支持

TestDownload 类通过 nose 测试框架支持并行测试执行。

这允许同时运行多个提取器测试,从而加快测试过程。

来源: test/test_download.py77-78

8. 测试失败处理

当测试失败时,框架会提供失败的详细信息。

  1. 对于提取失败,它会显示哪些字段与预期值不匹配。
  2. 对于下载失败,它会指示文件大小或校验和不匹配。
  3. 网络相关错误会重试多次,然后测试失败。
  4. 测试可以带有解释性消息而被跳过,以说明已知问题。

来源: test/test_download.py91-94 test/test_download.py175-183

这个全面的测试框架确保了 youtube-dl 提取器能够随着网站的不断发展和接口的改变而持续正确运行。