首页 > 解决方案 > 如何在 Python 的测试中获取文件?

问题描述

我有以下包结构:

.
├── 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

我应该怎么做?

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

标签: pythonpython-3.xunit-testingpython-packaging

解决方案


要在将测试文件名传递给您时获取测试资源,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()它轻松获取任何测试数据。


推荐阅读