本文档介绍了 youtube-dl 中的下载测试框架,该框架用于验证系统是否能正确提取视频信息并从支持的平台下载媒体文件。这些测试确保 youtube-dl 能够可靠地处理视频 URL、提取元数据和下载内容,同时保持预期的文件完整性。
有关特定提取器测试的信息,请参阅 提取器测试。有关格式选择测试的信息,请参阅 格式选择测试。
youtube-dl 中的下载测试通过针对预期结果进行真实下载测试来验证系统的核心功能。测试框架根据预定义的测试定义动态生成测试用例,并验证下载过程的各个方面,包括信息提取、文件下载和元数据处理。
来源: test/test_download.py72-274
下载测试系统使用一个自定义的 YoutubeDL 类版本,该版本专为测试目的设计,并根据测试用例定义动态生成测试方法。
来源: test/test_download.py52-65 test/test_download.py75-91 test/test_download.py100-275
测试框架使用了一个定制版本的 YoutubeDL 类,该类
这种设计确保了测试在出现意外行为时能快速失败,而不是仅仅记录警告。
来源: test/test_download.py52-65
测试是根据测试用例定义动态生成的。每个测试定义都成为 TestDownload 类的一个单独的测试方法,具有唯一的名称。
来源: test/test_download.py278-290
测试用例的定义包含详细的规范,这些规范控制着测试的内容和执行方式。系统在运行时加载这些定义。
| 属性 | 描述 |
|---|---|
名称 | 测试用例的标识符(用于测试方法名称) |
url | 要下载的 URL |
info_dict | 预期的元数据(id、标题、时长等) |
file_minsize | 预期的最小文件大小 |
md5 | 下载文件的预期 MD5 校验和 |
params | 下载的自定义参数 |
skip | 指示跳过测试的原因的消息 |
add_ie | 测试所需的附加提取器 |
对于播放列表,还有其他属性可用
| 属性 | 描述 |
|---|---|
playlist_mincount | 预期的最小条目数 |
playlist_maxcount | 预期的最大条目数 |
playlist_count | 预期的确切条目数 |
playlist_duration_sum | 所有条目时长的预期总和 |
来源: test/test_download.py72 test/test_download.py106-221
每个下载测试都遵循一致的执行流程,以验证提取和下载功能。
来源: test/test_download.py102-274
信息提取验证:
文件验证(当下载未被跳过时)
Info JSON 验证:
.info.json 文件存在来源: test/test_download.py223-266
测试系统包含强大的错误处理机制,用于区分测试失败和临时网络问题。
这种方法确保测试不会因为瞬态网络问题而失败,同时仍然能够捕获代码库中的实际错误。
来源: test/test_download.py163-188
下载测试使用 parameters.json 中定义的标准参数集,这些参数可以被单个测试用例覆盖。
| 关键参数 | 默认值 | 目的 |
|---|---|---|
outtmpl | %(id)s.%(ext)s | 输出文件名模板 |
test | true | 指示测试模式(可能会限制下载大小) |
writeinfojson | true | 将元数据写入 .info.json 文件 |
retries | 10 | 下载重试次数 |
verbose | true | 启用详细输出 |
几个辅助函数支持测试过程
_file_md5(fn):计算文件的 MD5 哈希值get_tc_filename(tc):确定测试用例的预期文件名try_rm_tcs_files(tcs):删除测试文件以进行清理expect_info_dict:验证提取的信息是否与预期值匹配来源: test/test_download.py67-69 test/test_download.py148-161
要添加新的下载测试,您需要创建额外的测试用例定义,其中指定
测试系统将自动为每个新定义生成测试方法。
来源: test/test_download.py278-290
下载测试涵盖了几个重要场景