Python unittest 批量执行用例时找不到测试数据目录(单独执行正常)
目录结构:
Interface_JinFive/
– /common
– /datas
–/Log
–/
各位大佬,我用 python+unittest 框架的时候,执行单个用例是可以正常找到数据目录的,批量执行就报错找不到目录,请问下是怎么会事情呢?
Python unittest 批量执行用例时找不到测试数据目录(单独执行正常)
这个问题很常见,通常是因为批量执行(比如在项目根目录执行 python -m unittest discover)和单独执行(在测试文件所在目录执行)时,当前工作目录(os.getcwd())不同导致的。
假设你的项目结构是这样的:
my_project/
├── tests/
│ ├── test_data/
│ │ └── data.json
│ └── test_example.py
└── src/
在 test_example.py 里,你可能用相对路径 'test_data/data.json' 来读取文件。当你在 tests/ 目录下单独执行这个文件时,当前目录就是 tests/,所以能找到文件。但如果你在 my_project/ 根目录批量执行,当前目录就变成了 my_project/,相对路径就指向了不存在的 my_project/test_data/data.json。
解决方案: 不要依赖当前工作目录,而是使用基于模块文件(__file__)的绝对路径来定位数据文件。
修改后的代码示例:
import os
import unittest
import json
class TestExample(unittest.TestCase):
def test_something(self):
# 关键:获取当前测试文件所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建指向测试数据文件的绝对路径
data_file_path = os.path.join(current_dir, 'test_data', 'data.json')
# 现在无论从哪里执行,都能正确找到文件
with open(data_file_path, 'r', encoding='utf-8') as f:
data = json.load(f)
# ... 你的测试断言
self.assertIn('key', data)
if __name__ == '__main__':
unittest.main()
核心思路: __file__ 变量总是代表当前 Python 文件的路径。通过 os.path.dirname(os.path.abspath(__file__)) 获取到测试文件所在的绝对目录,再以此为基础拼接数据文件的路径。这样,无论你的工作目录在哪里,路径都是确定的。
一句话总结:用 __file__ 构建绝对路径,别依赖工作目录。
提问的时候顺便带一下代码, 详细报错日志, 会让你的问题解决的更快.
不好意思,这个帖子是我发错了,我想删除可惜现在删不了。。

