如何导入从json文件读取数据的py模块?

时间:2019-05-02 15:07:35

标签: python-3.x import module pytest

我是pytest测试和尝试测试python模块main.py的新手,该模块包含类和函数,并且还读取静态config.json文件。当我为pytest导入主模块并运行测试时,出现一个错误,即找不到json文件。我希望再次对我在main.py中定义的类进行一次简单的测试,并且不需要config.json数据。

我尝试将pytest放在项目目录的不同部分,但这无济于事。我还尝试从程序中创建一个程序包,包括对MANIFEST.in文件中config.json文件的引用,并且我的config.json文件已与程序包一起安装,但是仍然遇到与配置文件相同的问题找不到。

我的目录

Project
   src 
      code
         main.py
         config.json
         tests
            test_main.py

我的pytest test_main.py:

import sys, os
myPath = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, myPath + '/../')

import pytest
from main import Reservation

@pytest.mark.runme
def test_reservation():
    starttime = "2019-05-03 12:30"
    booktime = "2019-05-02 8:00"
    newreservation = Reservation("002", "manicure", "normal", starttime, booktime, 1, 30)
    assert newreservation.get_serv_name() == "manicure"

来自main.py,位于第436行:

with open('config.json', 'rt') as fin:
    config = json.load(fin)
    business_name = config['business_name']

我希望能够从main.py导入Reservation类并对其进行测试,但是出现错误,找不到config.json文件:

pytest错误:

==================================== ERRORS ====================================
___________ ERROR collecting src/MiYE/tests/test_u01_load_clients.py ___________
test_main.py:6: in <module>
    from main import Reservation
../main.py:436: in <module>
    with open('config.json', 'rt') as fin:
E   FileNotFoundError: [Errno 2] No such file or directory: 'config.json'
=============================== warnings summary ===============================

顺便说一句,当我将main.py作为常规python文件(而不是导入的模块)运行时,可以成功访问config.json文件。此外,将测试从/ test移到代码目录时,问题仍然存在。

1 个答案:

答案 0 :(得分:0)

假设您有一个示例数据json,如下所示:

{ "url" : "http://www.example.com",
"username": "user1"

}

您可以使用以下代码从json文件提取数据:

with open('path /example.json') as json_file:
                    data = json.load(json_file)

username = data['username']