在 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 开始测试,您通常可以直接在那里设置它们。
我有一个 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 开始测试,您通常可以直接在那里设置它们。