如何在pytest中使用测试资源(比如固定的yaml文件)?

2024-10-01 17:32:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我浏览了pytest网站上的文档,但是没有找到一个使用“测试资源”的明确例子,比如在单元测试期间读取固定文件。类似于http://jlorenzen.blogspot.com/2007/06/proper-way-to-access-file-resources-in.html对Java的描述。在

例如,如果我有一个yaml文件签入到源代码管理中,那么编写从该文件加载的测试的正确方法是什么?我认为这归根结底是理解在python等价类路径(PYTHONPATH?)上访问“资源文件”的正确方法。在

这看起来应该很简单。有简单的解决办法吗?在


Tags: 文件to方法文档comhttppytest网站
2条回答

也许你要找的是pkg_资源或者pkgutil。例如,如果在python源代码中有一个名为“resources”的模块,则可以使用以下命令读取“resourcefile”:

with open(pkg_resources.resource_filename("resources", "resourcefile")) as infile:
    for line in infile:
        print(line)

或者:

^{pr2}$

当“脚本”是一个可执行的zip文件时,后者甚至可以工作。前者不需要从鸡蛋中解压你的资源。在

请注意,创建源代码的子目录不会使其成为模块。您需要在目录中添加一个名为__init__.py的文件,以便它作为模块可见,以便pkg_resources和pkgutil使用。__init__.py可以为空。在

我认为“资源文件”就是你在python中给它的任何定义(在Java中,资源文件可以与普通Java类绑定成jar文件,Java提供了库函数来访问这些信息)。在

一个等效的解决方案可能是访问PYTHONPATH环境变量,将“资源文件”定义为相对路径,然后在PYTHONPATH中寻找它。下面是一个例子:

pythonpath = os.env['PYTHONPATH']
file_relative_path = os.path.join('subdir', 'resourcefile') // e.g. subdir/resourcefile
for dir in pythonpath.split(os.pathsep):
    resource_path = os.path.join(dir, file_relative_path)
    if os.path.exists(resource_path):
        return resource_path

此代码段返回PYTHONPATH上存在的第一个文件的完整路径。在

相关问题 更多 >

    热门问题