You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找系统全路径指定扩展名文件编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:36:04