pytest - 具有来自另一个夹具的参数化的 pytest 夹具
问题描述
我正在使用 pytest,并希望为服务器返回的多个对象和多个服务器调用测试函数。
服务器在 YAML 文件中定义,这些定义作为参数化提供给夹具“server_connection”,该夹具“server_connection”返回单个服务器的连接对象。由于参数化,它会导致为每个服务器调用一次测试函数。
我可以通过测试函数中的循环来做到这一点:第二个夹具“server_objects”将“server_connection”夹具作为输入并返回服务器对象列表。然后 pytest 测试函数采用第二个夹具并通过服务器对象循环执行实际测试。
这是该代码:
import pytest
SD_LIST = ... # read list of server definitions from YAML file
@pytest.fixture(
params=SD_LIST,
scope='module'
)
def server_connection(request):
server_definition = request.param
return Connection(server_definition.url, ...)
@pytest.fixture(
scope='module'
)
def server_objects(request, server_connection):
return server_connection.get_objects()
def test_object_foo(server_objects):
for server_object in server_objects:
# Perform test for a single server object:
assert server_object == 'foo'
但是,缺点当然是测试失败会导致整个测试功能结束。
相反,我想要发生的是为每个单独的服务器对象调用测试函数,因此一个对象的测试失败不会阻止对其他对象的测试。理想情况下,我想要一个提供单个服务器对象的夹具,我可以将其传递给测试函数:
...
@pytest.fixture(
scope='module'
)
def server_object(request, server_connection):
server_objects = server_connection.get_objects()
# TBD: Some magic to parametrize this fixture with server_objects
def test_object_foo(server_object):
# Perform test for a single server object:
assert server_object == 'foo'
我已经阅读了所有关于固定装置的 pytest 文档,但没有找到一种方法来做到这一点。
我知道 pytest 钩子并且以前使用过例如 pytest_generate_tests() ,但我没有找到 pytest_generate_tests() 如何访问其他夹具的值的方法。
有任何想法吗?
更新:让我补充一点,我也为此进行了搜索,但没有找到答案。我专门看了一下:
解决方案
推荐阅读
- pandas - 熊猫,将长名称日期转换为短格式
- angular - Angular/Typescript 接口中的类型
- python - Setting a Label text with a slider
- python - Trouble printing each line of a string inside a double for loop python
- c - 为什么我的套接字没有收到任何消息?
- php - MySQL PHP insert new row where rowNum column values always remain chronological by date and time
- python-xarray - 变量 'lat' 有冲突的 _FillValue (nan) 和 missing_value (-9999.0)。无法编码数据
- shortest-path - 检索 k 海岸路径查询中的特定深度
- python-3.x - 无效参数:ARN 帐户 () 必须匹配经过身份验证的用户。",
- sql-server - 是否可以使用 Matillion ETL 工具将数据从 S3 加载到 SQL Server?