pytest固定装置,具有另一个固定装置的参数化功能

时间:2019-01-09 07:30:48

标签: pytest fixtures

我正在使用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()如何访问其他灯具的值的方法。

有什么想法吗?

更新:让我补充说,我也为此进行了搜索,但没有找到答案。我专门看了一下:

0 个答案:

没有答案