在 pytest 中引入多个不同文件路径的 Pythonic 方法

Pythonic way to introduce multiple different file-paths in pytest

我有一个 pytest 脚本,其中包含大约 20 个不同的测试。每个测试都会收集数据并将该数据存储在指定的文件路径中。每个文件路径在每个测试中单独定义。例如:

def test_1():
gfx = open('path/to/file_1')
do something

def test_2():
focus = open('path/to/file_2')
do something

def test_3():
data = open('path/to_1/file_3')
do something

问题是,我正在将这些脚本转移到新服务器。显然,此服务器现在有不同的目录,与我以前定义的目录不匹配。

我的问题是,为 pytest 引入文件路径的最 Pythonic 方式是什么?最好定义易于修改的变量吗?或者有更好的方法吗?

如果需要更多信息或澄清,请告诉我。

这可能是显而易见的,但通常为了避免此类问题,测试应该包括它们所需的数据。如果数据(文件)很大,也许你可以为你的测试创建一个最小的例子?那将是最干净的解决方案。

如果那不可能,例如最小数据(文件)仍然太大并且单独存储,因此路径的确切位置可能因机器而异。我会使用一个环境变量,其中设置了基本路径——正如你在评论中所建议的那样。

import os

try:
    test_data_base_path = os.environ['test_data_base_path']
except KeyError:
    print('Could not get environment variable "test_data_base_path". '
          'This is needed for the tests!')
    raise


def test_1():
    gfx = open(os.path.join(test_data_base_path, 'subfolder', 'to', 'file_1'))
    # do something

def test_2():
    focus = open(os.path.join(test_data_base_path, 'subfolder', 'to', 'file_2'))
    # do something

# ...

如何设置 test_data_base_path 环境变量取决于您 运行 测试的方式。如果您在全球范围内需要它,您可以通过 OS 来实现。如果您通过 IDE 开始测试,您通常可以直接在那里设置它们。