本地测试通过,Azure DevOps中却报FileNotFoundError,原因何在?
问题分析与解决方案
1. 路径分隔符与转义字符问题
你代码里直接用了Windows风格的反斜杠\,但Azure DevOps的构建代理大概率是Linux环境,Linux用正斜杠/作为路径分隔符。而且在Python中,反斜杠是转义字符,比如\C可能会被解析成特殊字符,导致实际路径和你预期的完全不一样。
解决办法:
- 直接改用正斜杠:
excelfile = 'test_files/Class/Default_Class_Input.xlsx' - 用Python跨平台路径工具(推荐):
或者用更现代的import os excelfile = os.path.join('test_files', 'Class', 'Default_Class_Input.xlsx')pathlib:from pathlib import Path excelfile = Path('test_files') / 'Class' / 'Default_Class_Input.xlsx' - 用原始字符串(仅适配Windows,不推荐跨平台场景):
excelfile = r'test_files\Class\Default_Class_Input.xlsx'
2. 工作目录不一致
本地测试时你的工作目录是项目根目录,但Azure DevOps运行测试时的工作目录可能不同——比如构建管道会把代码拉到特定子目录,或者测试任务的工作目录配置和本地不一致,导致相对路径的基准变了。
解决办法:
- 基于项目根目录构建绝对路径:
from pathlib import Path # 假设测试脚本在tests目录,项目根目录是其上级目录,可根据实际结构调整 project_root = Path(__file__).parent.parent excelfile = project_root / 'test_files' / 'Class' / 'Default_Class_Input.xlsx' - 在Azure DevOps的测试任务中,检查并设置正确的工作目录(比如在任务的
Working Directory字段指定项目根路径)。
3. 额外排查点
- 确认Azure DevOps构建过程中,
test_files目录确实被复制到了测试运行的目录下。部分构建任务默认只复制源代码目录,需要检查构建步骤是否包含测试文件目录。 - 临时添加日志打印,方便排查实际路径:
查看Azure DevOps的测试输出日志,对比实际路径和预期是否一致。import os print("当前工作目录:", os.getcwd()) excelfile = 'test_files/Class/Default_Class_Input.xlsx' print("目标文件绝对路径:", os.path.abspath(excelfile))
内容的提问来源于stack exchange,提问作者sdaw145
相关产品推荐
相关产品推荐

