首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python中获取测试中的文件?

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

Stack Overflow用户
提问于 2019-05-14 13:46:30
回答 3查看 975关注 0票数 6

我有如下的包结构:

代码语言:javascript
复制
.
├── 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中,我这样做:

代码语言:javascript
复制
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:使用..或者资源路径中的绝对路径是不允许的,并且会在将来的版本中引发异常。self,resource_name

我应该怎么做呢?

(我也可以更改包的结构,但我希望将测试数据保留在测试中-运行应用程序不需要这些数据)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-28 02:20:15

要在将测试文件名传递给pkg_resources时获得测试资源,您需要将文件中的路径用于测试,如下所示:

代码语言:javascript
复制
import pkg_resources
path = 'data/foobar.gz'
full_path = pkg_resources.resource_filename(__name__, path)

对于pytest,我也在conftest.py中使用了这个模式

代码语言:javascript
复制
@pytest.fixture('session')
def test_data_dir():
    return os.path.join(os.path.dirname(__file__), 'data')

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

票数 2
EN

Stack Overflow用户

发布于 2019-05-14 14:00:17

试用os模块

代码语言:javascript
复制
import os.path

source_folder =  os.getcwd()
path = os.path.join(source_folder, 'data/foobar.gz')
票数 -1
EN

Stack Overflow用户

发布于 2019-05-27 19:22:40

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

代码语言:javascript
复制
import sys
print(sys.argv[0])

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

代码语言:javascript
复制
import os
import sys
print(os.path.dirname(sys.argv[0]))

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

代码语言:javascript
复制
import os
import sys
print(os.path.join(os.path.dirname(sys.argv[0]), "some_subdir"))

哈!

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56123724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档