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

H_P*_*SQA 3 python pytest

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

pathname = os.path.dirname(os.path.realpath(__file__))
Run Code Online (Sandbox Code Playgroud)

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

这在使用执行脚本时工作正常 python xyz.py

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

基本上假设调用脚本是py.test它自己,它位于venv/bin.

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

Dmi*_*rev 7

如果我正确理解问题,您应该使用

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)
Run Code Online (Sandbox Code Playgroud)