如何查找系统全路径指定扩展名文件编写Python 3.9函数测试
Python自定义文件加载函数的全系统测试实现方案
1. 前置准备
你需要提前明确自定义加载函数的入参、返回值规则、异常抛出逻辑,测试代码会基于这些规则做断言校验。本文示例默认使用pytest测试框架,也可适配Python自带的unittest框架。
注意:遍历全系统磁盘会消耗大量时间,且容易触发系统权限报错,建议首次调试时先指定小范围的根目录扫描,验证逻辑正常后再全量扫描
2. 配置与工具函数实现
from pathlib import Path from typing import List import pytest # -------------------------- 配置项,根据实际需求修改 -------------------------- # 要匹配的目标文件扩展名,需带点前缀,例如 .json / .yaml / .bin TARGET_EXT = ".your_custom_ext" # 要跳过的目录前缀,避免扫描无权限/无意义的系统目录,可按操作系统增删 SKIP_DIRS = [ "/proc", "/sys", "/dev", # Linux 系统专属排除目录 "C:\\Windows", "C:\\Program Files", "C:\\Program Files (x86)", # Windows 系统专属排除目录 "/Applications", "/Library", "/System", # macOS 系统专属排除目录 ] # 可选:如果不需要全系统扫描,可直接指定扫描根目录,例如 root_paths = [Path("/home/your_name/test_dir")] CUSTOM_SCAN_ROOTS = None # --------------------------------------------------------------------------- def find_all_target_files(ext: str) -> List[Path]: """遍历指定目录/全系统磁盘,查找所有后缀匹配的文件""" target_files = [] # 确定扫描根目录 if CUSTOM_SCAN_ROOTS: root_paths = CUSTOM_SCAN_ROOTS elif Path("/").exists(): # 类Unix系统根目录 root_paths = [Path("/")] else: # Windows 系统遍历所有可用盘符 from string import ascii_uppercase root_paths = [Path(f"{d}:\\") for d in ascii_uppercase if Path(f"{d}:\\\\").exists()] for root in root_paths: # 跳过配置的排除根目录 if any(str(root).startswith(skip_dir) for skip_dir in SKIP_DIRS): continue try: # 递归遍历所有匹配扩展名的文件 for file_path in root.rglob(f"*{ext}"): if not file_path.is_file(): continue # 二次校验文件路径不在排除目录下 if any(str(file_path.parent).startswith(skip_dir) for skip_dir in SKIP_DIRS): continue target_files.append(file_path) except (PermissionError, OSError): # 无权限访问的目录直接跳过,不中断扫描 continue return target_files # 替换为你自己实现的文件加载函数 def your_custom_load_func(file_path: str) -> object: """ 你的自定义加载函数逻辑,示例规则: 加载成功返回对应对象,加载失败抛出对应异常 """ # 示例代码,替换为你的实际实现 with open(file_path, "r", encoding="utf-8") as f: return f.read()
3. 测试用例实现
# 预加载所有符合条件的目标文件,作为参数化数据源 test_file_list = find_all_target_files(TARGET_EXT) @pytest.mark.parametrize("file_path", test_file_list, ids=lambda path: str(path)) def test_file_load_normal(file_path: Path): """单文件加载测试用例,会遍历所有找到的目标文件逐一执行""" # 前置校验:文件存在且为有效文件 assert file_path.exists(), f"测试文件不存在:{str(file_path)}" assert file_path.is_file(), f"路径不是有效文件:{str(file_path)}" # 执行加载逻辑 try: load_result = your_custom_load_func(str(file_path)) except Exception as e: pytest.fail(f"文件加载失败 {str(file_path)},错误信息:{str(e)}") # 结果校验,根据你的业务逻辑调整断言规则 assert load_result is not None, f"加载结果为空:{str(file_path)}" # 例如加载的是JSON配置可加:assert isinstance(load_result, dict)
4. 运行说明
- 调试阶段建议先配置
CUSTOM_SCAN_ROOTS指定小范围测试目录,验证逻辑无误后再开启全系统扫描 - 如果使用Python自带的
unittest框架,将参数化逻辑替换为subTest遍历test_file_list即可,核心校验逻辑完全一致 - 可根据你的加载函数的业务规则,自由扩展测试用例里的断言项,比如校验加载后对象的字段、格式等是否符合预期
内容的提问来源于stack exchange,提问作者ZahraonStack
相关产品推荐
相关产品推荐

