当使用py.test测试该模块时,如何通过其相对于Python模块的路径打开文件?

时间:2016-02-11 11:09:40

标签: python pytest

我在一个包中有一个模块,它指出了调用python程序的路径:

pathname = os.path.dirname(os.path.realpath(__file__))

从那里拿起mydata.json来读取一些参数值。

使用python xyz.py

执行脚本时,此方法正常

但同样的事情,当在目录中使用py.test完成时,路径只指向一些二进制文件:/home/user/venv/bin/data/data.json

基本上,调用脚本假定为py.test本身,位于venv/bin

如何克服这个问题?我想获取脚本的路径,而脚本又由py.test本身(通过模块)处理。

2 个答案:

答案 0 :(得分:3)

如果我正确理解了问题你应该使用

import json
import os

path_to_current_file = os.path.realpath(__file__)
current_directory = os.path.split(path_to_current_file)[0]
path_to_file = os.path.join(current_directory, "mydata.json")
with open(path_to_file) as mydata:
    my_json_data = json.load(mydata)

答案 1 :(得分:0)

与上面提供的版本略有不同:

path_to_current_file = os.path.realpath(__file__)
current_directory = os.path.dirname(path_to_current_file)
path_to_file = os.path.join(current_directory, "mydata.json")