如何在Python测试中获取文件?

时间:2019-05-14 05:46:30

标签: python python-3.x unit-testing python-packaging

我的包装结构如下:

.
├── my_app
│   ├── app.py
│   ├── cli.py
│   ├── db.py
│   └── __init__.py
├── setup.py
├── tests
│   ├── data
│   │   └── foobar.gz
│   ├── test_app.py
│   └── test_database.py
└── tox.ini

test_app.py内,我这样做:

import pkg_resources
path = '../tests/data/foobar.gz'
full_path = pkg_resources.resource_filename(__name__, path)

现在我已经看到消息:

/usr/local/lib/python3.7/site-packages/pkg_resources/__init__.py:1145:
  DeprecationWarning: Use of .. or absolute path in a resource path
  is not allowed and will raise exceptions in a future release.
self, resource_name

我该怎么办?

(我也可以更改软件包的结构,但我想将测试数据保留在测试中-无需运行应用程序)

3 个答案:

答案 0 :(得分:0)

要在将测试文件名传递到pkg_resources时获取测试资源,您希望将文件的路径用于以下测试:

import pkg_resources
path = 'data/foobar.gz'
full_path = pkg_resources.resource_filename(__name__, path)

在pytest中,我也在conftest.py中使用了这种模式:

@pytest.fixture('session')
def test_data_dir():
    return os.path.join(os.path.dirname(__file__), 'data')

我可以使用os.path.join()轻松获得任何测试数据。

答案 1 :(得分:-1)

尝试os模块

import os.path

source_folder =  os.getcwd()
path = os.path.join(source_folder, 'data/foobar.gz')

答案 2 :(得分:-1)

要获取相对于脚本目录的路径,请尝试使用脚本位置本身:

import sys
print(sys.argv[0])

您可以使用os.path.dirname()获取包含脚本的目录:

import os
import sys
print(os.path.dirname(sys.argv[0]))

然后,os.path.join()可能有助于创建任意路径:

import os
import sys
print(os.path.join(os.path.dirname(sys.argv[0]), "some_subdir"))

HTH!