在 python (pytest) 测试中使用资源文件

Ric*_*d B 6 python pytest python-3.x

有人能告诉我在 pytest 中处理资源文件的正确方法是什么吗?

我习惯在包(src)目录下创建一个资源目录,并在测试分支下创建另一个目录

root---package---resource_dir
     |         |-file1.py
     |         |-file2.py
     |
     |-test-- resource_dir-
            |              |-config1.csv
            |              |-config2.csv
            |-test1.py
            |-test2.py
Run Code Online (Sandbox Code Playgroud)

如果我想从测试中访问这些文件,Pythonic 的方式是什么?到目前为止,我一直在使用相对文件路径,但该解决方案并不是很好。有没有类似于Java资源解决方案的解决方案?

Ric*_*d B 1

我发现做到这一点的一种方法是使用 pkg_resources。它能够在您的包中搜索文件。因此,例如,如果您想打印测试资源目录中的文件的内容,您可以执行以下操作:

import pkg_resources
config_file = open(pkg_resources.resource_filename('test.resources','config.csv'),'r')
    for line in config_file:
        print(line)

    print(">>>End of File")
Run Code Online (Sandbox Code Playgroud)

请注意,所有目录和子目录都需要打包(即init .py 文件必须存在,即使它是空的)。