如何在@ pytest.mark.parametrize中使用函数返回值

时间:2018-01-24 15:59:12

标签: python pytest

我尝试学习如何在我的测试中使用pytest.mark.parametrize,并找到一个例子如下。

import pytest
@pytest.mark.parametrize("test_input,expected", [ ("3+5",8), ("2+4",6), ("6*9",42), return_param])
def test_eval(test_input, expected):
    assert eval(test_input) == expected

但是,如何用一些函数返回值替换 3 + 5 2 + 4 6 * 9 ?喜欢 return_param

import pytest
@pytest.mark.parametrize("test_input,expected", [ ("3+5",8), ("2+4",6), ("6*9",42), return_param])
def test_eval(test_input, expected):
    assert eval(test_input) == expected


def return_param(sef):
    return 7*8, 56

2 个答案:

答案 0 :(得分:0)

看起来很简单:

import pytest

def return_param():
    return "7*8", 56

@pytest.mark.parametrize("test_input,expected", [
    ("3+5", 8),
    ("2+4",6),
    ("6*9",42),
    return_param(),
])
def test_eval(test_input, expected):
    assert eval(test_input) == expected

答案 1 :(得分:0)

根据函数返回值的关注,可以使用返回值。 但正如你所说,返回方法将在setup类中,而不是添加额外的return_param(),在setup类本身中添加你的返回逻辑。

注意: - setup_class的返回值将是生成器/实例类型。