python - 如何在 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
我应该怎么做?
(我也可以更改包的结构,但我想将测试数据保留在测试中 - 运行应用程序不是必需的)
解决方案
要在将测试文件名传递给您时获取测试资源,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()
它轻松获取任何测试数据。
推荐阅读
- java - 如何在java中使用lambda表达式缩写数据处理代码?
- c - 如何向/从其他处理器发送/接收结构数组?
- asp.net-core - Entity Framework Core 不加载一些相关对象
- delphi - 如何将重载的类方法分配给匿名方法?
- angular8 - 下面的语法有什么区别吗?
- android - 加载程序抛出错误 2035:即使文件存在也找不到 URL
- php - 未定义的属性:视图内的 stdClass::$id
- sql-server - 我的数据库日志文件大小有问题
- bash - 如何在 if 语句中使用 grep 和逻辑运算符
- python - 多个条件 - 在熊猫数据框中选择行