如何在pytest的mark.parameterze中使用fixture

时间:2018-12-14 10:55:17

标签: python unit-testing testing pytest fixtures

我的情况如下:

@pytest.fixture(scope="module", params=[5, 10])
def get_data(request):
    data = []
    for i in range(request.param):
        data.append((i, 2))
    return data


@pytest.mark.parametrize(('test_input','expected'), get_data)
def test_data_types(test_input, expected):
    assert (test_input%expected) == 0

但是我收到一个错误,即“ TypeError:'function'对象不可迭代”。如何实现我的目标。我读到我们不能在参数化测试函数中使用夹具作为参数,但是我想要一些替代方法。

1 个答案:

答案 0 :(得分:0)

如前所述,您可以使用普通函数来获取数据。这是一个简单的例子。 我的每个测试文件中都有一个get_data()函数,该函数从excel文件的不同工作表中提取数据。

from utils.excel_utils import ExcelUtils
import pytest


def get_data():
    data = ExcelUtils("inputData.xlsx", "Session").get_input_rows()
    for row in data:
        yield row


@pytest.mark.parametrize("test_input", get_data())
def test_session(test_input):
    print(test_input)
    assert "session" in test_input