本文档全面概述了用于验证 youtube-dl 中提取器功能的测试框架。提取器负责解析网站内容并提取媒体信息。测试提取器对于确保它们能够正确识别、解析并为各种媒体平台返回有效信息至关重要。
有关通用测试框架的信息,请参阅 测试框架,有关下载特定测试的信息,请参阅 下载测试。
youtube-dl 提取器测试系统旨在验证提取器是否能正确地从支持的平台提取元数据和下载媒体文件。该框架通过以下方式工作:
测试框架通过 youtube-dl 特定的功能扩展了标准的 Python unittest 框架。
来源: test/test_download.py72-290
提取器测试系统包含几个关键组件:
该框架定义了一个自定义 YoutubeDL 类,该类通过特定于测试的功能扩展了主 youtube_dl.YoutubeDL 类。
来源: test/test_download.py52-64
TestDownload 类是主要的测试类,其中包含为每个定义的测试用例动态生成的测试方法。每个测试方法都遵循 test_<extractor_name> 的命名约定,并在运行时生成。
来源: test/test_download.py75-94 test/test_download.py279-290
提取器测试定义在测试用例文件中,这些文件包含有关要为每个提取器测试的内容的结构化信息。测试框架使用 gettestcases() 函数加载这些定义。
每个测试用例可以包含以下属性:
| 属性 | 描述 |
|---|---|
名称 | 要测试的提取器名称 |
url | 要提取信息的 URL |
info_dict | 包含元数据的预期信息字典 |
params | 测试的自定义参数 |
skip | 跳过测试的原因(如果适用) |
add_ie | 测试所需的附加提取器 |
playlist | 播放列表项的测试用例 |
playlist_mincount | 播放列表中预期的最小项目数 |
playlist_maxcount | 播放列表中预期的最大项目数 |
playlist_count | 播放列表中预期的确切项目数 |
file_minsize | 预期的最小文件大小 |
md5 | 下载文件的预期 MD5 哈希值 |
来源: test/test_download.py100-169
测试使用在 test/parameters.json 中定义的默认参数,这些参数可以被特定于测试的参数覆盖。
{
"outtmpl": "%(id)s.%(ext)s",
"test": true,
"writeinfojson": true,
"verbose": true,
"format": "best"
// Additional parameters...
}
提取器测试的执行遵循详细的工作流程:
来源: test/test_download.py162-266
测试框架采用多种验证机制:
来源: test/test_download.py225-266
该框架包含用于处理瞬时网络问题的重试机制。
默认重试次数设置为 3 次,以处理瞬时网络问题。
来源: test/test_download.py163-188 test/test_download.py43
提取器测试框架对播放列表有特殊处理。
来源: test/test_download.py190-221
要添加新的提取器测试,请执行以下操作:
新测试会被测试框架自动发现并执行。
来源: test/test_download.py100-110
实际测试执行遵循以下过程:
TestDownload 类通过 nose 测试框架支持并行测试执行。
这允许同时运行多个提取器测试,从而加快测试过程。
来源: test/test_download.py77-78
当测试失败时,框架会提供失败的详细信息。
来源: test/test_download.py91-94 test/test_download.py175-183
这个全面的测试框架确保了 youtube-dl 提取器能够随着网站的不断发展和接口的改变而持续正确运行。