我正在尝试为测试单个api端点的多个测试方案定义初始化数据。我想这样做,这样我就不必为仅数据不同的测试的多次迭代生成样板代码。我似乎无法用内置的pytest固定装置来解决这个问题。本质上,这就是我想要做的事情:
在tests / conftext.py中:
import pytest
@pytest.fixture(scope="module")
def data_for_a():
return "a_data"
@pytest.fixture(scope="module")
def data_for_b():
return "b_data"
在tests / tests.py中
import pytest
# this works
def test_a(data_for_a):
assert "a_data" == data_for_a
# but I want to do this and it fails:
scenarios = [
{ "name": "a", "data": data_for_a },
{ "name": "b", "data": data_for_b },
]
for scenario in scenarios:
print(scenario.name, scenario.data)
# desired output:
# "a a_data"
# "b b_data"
我收到一个
NameError: name 'data_for_a' is not defined
异常。我已经尝试了各种方法来使其工作,但是似乎没有办法将夹具作为参数传递给测试方法-因此,要么定义一堆样板测试,要么使用一堆if / else语句在一次测试中,并明确通过每个灯具。我不喜欢这些选项。目前看来,我只需要构建自己的帮助程序模块来提取此测试数据,但是我宁愿使用内置机制来实现这一点。有什么办法吗? 最佳答案
您可以像这样从conftest.py导入:
from conftest import data_for_a, data_for_b
要么
from conftest import *
这样您就可以引用该函数,而无需将其作为参数传递给测试函数。
编辑:
请注意,根据the official pytest documentation,通常不建议这样做
如果您有不在python软件包目录中的conftest.py文件(例如,包含__init__.py的文件),则“ import conftest”可能会模棱两可,因为您的PYTHONPATH或sys上可能还会有其他conftest.py文件。路径。因此,对于项目而言,最好的做法是将conftest.py置于程序包范围内,或者从不导入任何conftest.py文件。
关于python - 如何动态获取pytest夹具数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39475849/