猿问

pytest:通过固定装置参数化测试用例

您如何编写产生/返回参数化测试参数的夹具(一种方法)?


例如,我有一个测试如下:


@pytest.mark.parametrize(

    "input,expected", 

    [("hello", "hello"),

    ("world", "world")])

def test_get_message(self, input, expected):

    assert expected == MyClass.get_message(input)

我对以下方法感兴趣,而不是通过input和expected传递:@pytest.mark.parametrize


@pytest.fixture(scope="session")

def test_messages(self):

    # what should I write here to return multiple 

    # test case with expected value for each?

    pass


def test_get_message(self, test_messages):

    expected = test_messages["expected"] # somehow extracted from test_messages?

    input = test_messages["input"]       # somehow extracted from test message?

    assert expected == MyClass.get_message(input)


holdtom
浏览 125回答 2
2回答

不负相思意

要将参数移动到夹具中,您可以使用夹具参数:@pytest.fixture(params=[("hello", "hello"),    ("world", "world")], scope="session")def test_messages(self, request):    return request.paramdef test_get_message(self, test_messages):    input = test_messages[0]       expected = test_messages[1]    assert expected == MyClass.get_message(input)您还可以将参数放入单独的函数中(与 wih 相同parametrize),例如def get_test_messages():    return [("hello", "hello"), ("world", "world")]@pytest.fixture(params=get_test_messages(), scope="session")def test_messages(self, request):    return request.param

烙印99

对我来说,你似乎想返回一个字典数组:@pytest.fixture(scope="session")def test_messages():    return [        {            "input": "hello",            "expected": "world"        },        {            "input": "hello",            "expected": "hello"        }    ]要在测试用例中使用它,您需要遍历数组:def test_get_message(self, test_messages):    for test_data in test_messages:        input = test_data["input"]        expected = test_data["expected"]        assert input == expected但我不确定这是否是最好的方法,因为它仍然被视为只有一个测试用例,因此它只会在输出/报告中显示为一个测试用例。
随时随地看视频慕课网APP

相关分类

Python
我要回答