我正在使用pytest,并且想为服务器返回的许多对象以及许多服务器调用测试函数。
服务器在YAML文件中定义,并且这些定义作为参数提供给夹具“ server_connection”,该夹具返回单个服务器的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()如何访问其他灯具的值的方法。
有什么想法吗?
更新:让我补充说,我也为此进行了搜索,但没有找到答案。我专门看了一下: